Добавить Отчество на страницу оформления заказа Woocommerce

По умолчанию в 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 теперь будет Отчество:

snimok jekrana 2025 10 20 v 23.37.14

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

snimok jekrana 2025 10 21 v 00.34.03

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

snimok jekrana 2025 10 21 v 15.11.10

И выведем поле Отчество в личном кабинете 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);

Вот так это будет выглядеть в личном кабинете:

snimok jekrana 2025 10 21 v 16.34.41
Picture of Автор: Александра

Автор: Александра

@avsalexandra
Занимаюсь натуральным питанием собак и кошек BARF. Wordpress для души ☺️

Crocoblock
Elementor
Gutenberg
Jetengine
Jetformbuilder
profile builder
Woocommerce
Wordpress
WYSIWYG
Лейка
#автосохранение
#доменная почта
#рассылка
#бейдж
#благотворительность
#заказ ожидает
#подарок
#подчёркивание
#публикация постов
#видео
#пожертвования
#мультивыбор
#роли
#drag and drop
#изображения товаров
#подписки
#распродажа
#личный кабинет
#пагинация
#alt text
#галерея товара
#аватар
#возврат
#видео товара
#купон
#отменить заказ
Комментарии:

Добавить комментарий