2013-09-17 4 views
11

Я настраиваю страницу «Просмотр заказа» (order-details.php) в Woocommerce в разделе «Моя учетная запись» (когда пользователь вошел в систему), и у нас есть код для печати адресов фактурирования и доставки:Woocommerce - Как настроить выходные данные?

<?php if (!$order->get_formatted_billing_address()) _e('N/A', 'woocommerce'); else echo $order->get_formatted_billing_address(); ?> 

Я хотел бы знать, есть ли способ настроить каждый элемент этого вывода. Например: на домашней странице Моей учетной записи, которая показывает счета и адрес доставки клиента таким образом:

<?php 
    $address = apply_filters('woocommerce_my_account_my_address_formatted_address', array(
     'first_name' => ucwords(get_user_meta($customer_id, $name . '_first_name', true)), 
     'last_name'  => ucwords(get_user_meta($customer_id, $name . '_last_name', true)), 
     'company'  => ucwords(get_user_meta($customer_id, $name . '_company', true)), 
     'address_1'  => ucwords(get_user_meta($customer_id, $name . '_address_1', true)), 
     'address_2'  => ucwords(get_user_meta($customer_id, $name . '_address_2', true)), 
     'city'   => get_user_meta($customer_id, $name . '_city', true), 
     'state'   => get_user_meta($customer_id, $name . '_state', true), 
     'postcode'  => get_user_meta($customer_id, $name . '_postcode', true), 
     'country'  => get_user_meta($customer_id, $name . '_country', true) 
    ), $customer_id, $name); 

    $formatted_address = $woocommerce->countries->get_formatted_address($address); 

    if (! $formatted_address) 
     _e('You have not set up this type of address yet.', 'woocommerce'); 
    else 
     echo $formatted_address; 
?> 

Это что-то вроде, что я хочу использовать в виде заказа странице. Как я могу поместить этот «apply_filters» в этот код?

+0

Это само по себе отлично работает! – Avishai

ответ

14

Вам необходимо добавить 3 фильтра, чтобы изменить выходные данные адресов на странице «Моя учетная запись»/короткий код для WooCommerce.

Для начала нужно добавить woocommerce_my_account_my_address_formatted_address, чтобы добавить новые значения, например, телефон пользователя.

add_filter('woocommerce_my_account_my_address_formatted_address', function($args, $customer_id, $name){ 
    // the phone is saved as billing_phone and shipping_phone 
    $args['phone'] = get_user_meta($customer_id, $name . '_phone', true); 
    return $args; 
}, 10, 3); 

Далее вы используете woocommerce_localisation_address_formats изменить форматирование адреса - это определяется кодом страны - или вы можете перебрать массив, чтобы изменить их все, реорганизации или добавления полей (телефон).

// modify the address formats 
add_filter('woocommerce_localisation_address_formats', function($formats){ 
    foreach ($formats as $key => &$format) { 
     // put a break and then the phone after each format. 
     $format .= "\n{phone}"; 
    } 
    return $formats; 
}); 

Наконец вам нужно будет обновить woocommerce_formatted_address_replacements иметь WooCommerce заменить строку замены с фактическими данными.

// add the replacement value 
add_filter('woocommerce_formatted_address_replacements', function($replacements, $args){ 
    // we want to replace {phone} in the format with the data we populated 
    $replacements['{phone}'] = $args['phone']; 
    return $replacements; 
}, 10, 2); 
+1

это как-то точный код, который я искал, чтобы добавить пользовательские поля, а затем изменить порядок адресов. ты мой любимый. ty ty ty – Eolis

-1

В качестве шаблона заданного по умолчанию параметра и адреса для конкретных стран заданы по умолчанию в классе-wc-countries.php. Пример фрагмента ниже в вашем файле functions.php изменяет форматирование адреса по умолчанию.

function custom_address_formats($formats) { 
    $formats[ 'default' ] = "{name}\n{company}\n{address_1} {address_2}\n{postcode} {city}"; 
    return $formats; 
} 
add_filter('woocommerce_localisation_address_formats', 'custom_address_formats'); 

Посмотрите на упомянутый шаблон, чтобы узнать, какие компоненты адреса вы хотите включить и в каком порядке их отобразить.

Смежные вопросы