В woocommerce существует 2 типа адресов: billing (адрес плательщика) и shipping (адрес доставки). Поля в обоих типах адресов дублируются. Для нашей страны более характерно использовать billing для данных клиента (без указания адреса), а shipping для адреса доставки (без указания имени и фамилии). Так легче настроить оформление заказа, а именно отключение полей доставки если выбран, например, самовывоз.
Изменяем набор полей
Отключаем лишние поля в каждом из адресов:
// Удаляем поля из адресов Плательщика и Доставки
add_filter( 'woocommerce_billing_fields' , 'custom_override_billing_fields' );
function custom_override_billing_fields( $fields ) {
//unset($fields['billing_country']); //нельзя отключать ибо не сработает сохранение
unset($fields['billing_address_1']);
unset($fields['billing_address_2']);
unset($fields['billing_city']);
unset($fields['billing_state']);
unset($fields['billing_postcode']);
return $fields;
}
add_filter( 'woocommerce_shipping_fields' , 'custom_override_shipping_fields' );
function custom_override_shipping_fields( $fields ) {
unset($fields['shipping_first_name']);
unset($fields['shipping_last_name']);
unset($fields['shipping_company']);
//unset($fields['shipping_country']); //нельзя отключать ибо не сработает сохранение
unset($fields['shipping_state']);
unset($fields['shipping_postcode']);
unset($fields['shipping_address_2']);
//$fields['shipping_city']['data-priority'] = '10';
$fields['shipping_city'] = array(
'label' => 'Населённый пункт',
'required' => true,
'class' => array( 'form-row-wide', '' ),
'placeholder' => 'Населённый пункт',
'priority' => 20,
);
return $fields;
}
Данными хуками мы отключаем поля только во вкладке Адреса личного кабинета. Хук woocommerce_default_address_fields отключает поле глобально, при этом даже не нужно указывать префикс billing_ или shipping_. Хук woocommerce_checkout_fields отключает поля только в оформлении.
Изменяем заголовки адресов в ЛК
add_filter( 'woocommerce_my_account_get_addresses', 'er45d_woo_change_title_account' );
function er45d_woo_change_title_account( $account_title ) {
$account_title = array(
'billing' => __( 'Данные плательщика', 'text-domain' ),
'shipping' => __( 'Адрес доставки', 'text-domain' ),
);
return $account_title;
}
Добавить в вывод информации о плательщике телефон и email
if( is_wc_endpoint_url( 'edit-address' ) ) {
add_filter( 'woocommerce_my_account_my_address_formatted_address', 'er34d_formatted_address',10, 3 );
function er34d_formatted_address( $args, $customer_id, $name ){
$args['phone'] = get_user_meta( $customer_id, $name . '_phone', true );
$args['email'] = get_user_meta( $customer_id, $name . '_email', true );
return $args;
}
add_filter( 'woocommerce_localisation_address_formats', 'fe45_localisation_address_formats');
function fe45_localisation_address_formats( $formats ){
foreach ( $formats as $key => &$format ) {
$format .= "\n{phone}";
$format .= "\n{email}";
}
return $formats;
}
add_filter( 'woocommerce_formatted_address_replacements', 'er45_formatted_address_replacements', 10, 2 );
function er45_formatted_address_replacements( $replacements, $args ){
$replacements['{phone}'] = $args['phone'];
$replacements['{email}'] = $args['email'];
return $replacements;
}
}
[site-socialshare]