По умолчанию в Woocommerce только Имя и Фамилия, но для службы доставки часто требуется Отчество, например, почта России, возможно СДЭК, Яндекс Доставка, (Boxberry, которая стала Яндекс Доставкой), ПЭК и так далее.
Давайте его добавим, это очень просто!
Сначала добавим Отчество в админку WordPress и на страницу оформления заказа, вставьте ниже сниппет-код:
//Добавить Отчество в метаполе пользователя
add_filter('woocommerce_customer_meta_fields', 'avs_admin_address_field');
function avs_admin_address_field($admin_fields) {
$original_billing_fields = $admin_fields['billing']['fields'];
$new_billing_fields = array();
foreach ($original_billing_fields as $key => $field) {
$new_billing_fields[$key] = $field;
if ($key === 'billing_first_name') {
$new_billing_fields['billing_patronymic'] = array(
'label' => 'Отчество',
'description' => '',
);
}
}
$admin_fields['billing']['fields'] = $new_billing_fields;
return $admin_fields;
}
// Добавляем поле "Отчество" на страницу оформления заказа
add_filter('woocommerce_checkout_fields', 'avs_checkout_name_layout', 20);
function avs_checkout_name_layout( $fields ) {
if ( empty( $fields['billing']['billing_patronymic'] ) ) {
$fields['billing']['billing_patronymic'] = array(
'type' => 'text',
'label' => 'Отчество',
'required' => true, //поле обязательное
);
}
if ( isset( $fields['billing']['billing_first_name'] ) ) {
$fields['billing']['billing_first_name']['class'] = array( 'form-row-first' );
$fields['billing']['billing_first_name']['priority'] = 10;
}
$fields['billing']['billing_patronymic']['class'] = array( 'form-row-last' );
$fields['billing']['billing_patronymic']['priority'] = 11;
$fields['billing']['billing_patronymic']['clear'] = true;
if ( isset( $fields['billing']['billing_last_name'] ) ) {
$fields['billing']['billing_last_name']['class'] = array( 'form-row-first' );
$fields['billing']['billing_last_name']['priority'] = 20;
}
return $fields;
}
// Сохраняем отчество в МЕТА ЗАКАЗА (современный хук для HPOS)
add_action('woocommerce_checkout_create_order', 'avs_save_billing_patronymic_to_order', 10, 2);
function avs_save_billing_patronymic_to_order( $order, $data ) {
if ( ! empty( $data['billing_patronymic'] ) ) {
$order->update_meta_data(
'billing_patronymic',
sanitize_text_field( wp_unslash( $data['billing_patronymic'] ) )
);
}
}
// Сохраняем отчество в МЕТА ПОЛЬЗОВАТЕЛЯ (для авторизованных)
add_action('woocommerce_checkout_update_user_meta', 'avs_save_billing_patronymic_to_user', 10, 1);
function avs_save_billing_patronymic_to_user( $customer_id ) {
if ( $customer_id > 0 && isset( $_POST['billing_patronymic'] ) ) {
$value = sanitize_text_field( wp_unslash( $_POST['billing_patronymic'] ) );
if ( $value !== '' ) {
update_user_meta( $customer_id, 'billing_patronymic', $value );
}
}
}
// Показываем введенное значение поля "Отчество" на странице заказа в админке
add_action('woocommerce_admin_order_data_after_billing_address', 'display_custom_checkout_fieldsss_in_admin', 10, 1);
function display_custom_checkout_fieldsss_in_admin($order){
echo '<p><strong>' . esc_html__( 'Отчество', 'default' ) . ':</strong> ' . esc_html( $order->get_meta('billing_patronymic') ) . '</p>';
}
// Выводим ФИО в блоке деталей о клиенте на странице информации о заказе (личный кабинет)
add_action(
'woocommerce_order_details_after_customer_details',
'avs_display_full_name_in_customer_details',
10,
1
);
function avs_display_full_name_in_customer_details( $order ) {
$first_name = $order->get_billing_first_name();
$last_name = $order->get_billing_last_name();
$patronymic = $order->get_meta('billing_patronymic');
$full_name = trim( sprintf('%s %s %s', $last_name, $first_name, $patronymic) );
if ( $full_name !== '' ) {
echo '<p class="full-name-field"><span class="user-icon"></span> ' . esc_html( $full_name ) . '</p>';
}
}В админке WordPress теперь будет Отчество:

На странице оформления заказа:

Кстати код работает, если включён HPOS! Если Вы ещё не перешли, то лучше это сделать сейчас, так как сайт будет работать намного лучше и быстрее. Woocommerce — Настройки — Дополнительно — Возможности. Если у Вас новый сайт, то HPOS включён по умолчанию.

И выведем поле Отчество в личном кабинете Woocommerce в платёжном адресе. Я лично не люблю как cделан личный кабинет Woocommerce и делаю его через плагин jetengine profile builder.
// Показать "Отчество" в форме редактирования платежного адреса в ЛК
add_filter('woocommerce_billing_fields', function( $fields ) {
if ( isset( $fields['billing_first_name'] ) ) {
$fields['billing_first_name']['class'] = array( 'form-row-first' );
$fields['billing_first_name']['priority'] = 10;
}
if ( empty( $fields['billing_patronymic'] ) ) {
$fields['billing_patronymic'] = array(
'type' => 'text',
'label' => 'Отчество',
'required' => true,
);
}
$fields['billing_patronymic']['class'] = array( 'form-row-last' );
$fields['billing_patronymic']['priority'] = 11;
$fields['billing_patronymic']['clear'] = true;
if ( isset( $fields['billing_last_name'] ) ) {
$fields['billing_last_name']['class'] = array( 'form-row-first' );
$fields['billing_last_name']['priority'] = 20;
}
return $fields;
}, 20);Вот так это будет выглядеть в личном кабинете:
