Woocommerce - Как настроить выходные данные?
Я настраиваю страницу "Порядок заказа" (order-details.php) в 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" в этот код?
Ответы
Ответ 1
Вам нужно добавить 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 );
Ответ 2
В классе-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');
Посмотрите на упомянутый шаблон, чтобы узнать, какие компоненты адреса вы хотите включить и в каком порядке их отобразить.