Как добавить новое поле на страницу оформления заказа в WooCommerce

В прошлых статьях мы рассказали о том, как добавить поля к уже существующим на странице оформления заказа (оплаты и доставки), но что если понадобится добавить какое-то свое поле? В сегодняшней статье мы покажем, как добавить новое поле на страницу оформления заказа в WooCommerce.

Для этого нам понадобится добавить следующий код в файл functions.php вашей темы или в плагин для сайта WordPress:

/**
 * Добавляем поле на страницу оформления заказа
 */
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );

function my_custom_checkout_field( $checkout ) {

    echo '<div id="my_custom_checkout_field"><h2>' . __('Мое поле') . '</h2>';

    woocommerce_form_field( 'my_field_name', array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'label'         => __('Заполните это поле'),
        'placeholder'   => __('Введите здесь требуемый текст'),
        ), $checkout->get_value( 'my_field_name' ));

    echo '</div>';

}

Вот что мы получим в результате:

WooCommerce-Codex-Checkout-Field-Hook[1]

Далее, нам необходимо будет проверить это поле в момент отправки формы заказа пользователем. В качестве примера мы сделаем его обязательным:

/**
 * Выполнение формы заказа
 */
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // Проверяем, заполнено ли поле, если же нет, добавляем ошибку.
    if ( ! $_POST['my_field_name'] )
        wc_add_notice( __( 'Пожалуйста, введите требуемый текст в наше новое замечательное поле.' ), 'error' );
}

Вот так будет выглядеть ошибка при оформлении заказа, если поле оставить пустым:

WooCommerce-Codex-Checkout-Field-Notice[1]

И, наконец, сохраняем новое поле в произвольное поле заказа, используя следующий код:

/**
 * Обновляем метаданные заказа со значением поля
 */
add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );

function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ( ! empty( $_POST['my_field_name'] ) ) {
        update_post_meta( $order_id, 'My Field', sanitize_text_field( $_POST['my_field_name'] ) );
    }
}

Вот и все. Теперь поле будет сохраняться в заказе.

И еще один момент, если вы захотите отобразить свое добавленное поле, а точнее его значение, на странице редактирования заказа в админке, можно добавить следующий код:

/**
 * Выводим значение поля на странице редактирования заказа
 */
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('Мое поле').':</strong> ' . get_post_meta( $order->id, 'My Field', true ) . '</p>';
}

А вот таким будет результат:

checkout_field_custom_field_admin[1]

Делаем поле ввода телефона не обязательным

<?php

add_filter( 'woocommerce_billing_fields', 'wc_npr_filter_phone', 10, 1 );

function wc_npr_filter_phone( $address_fields ) {
    $address_fields['billing_phone']['required'] = false;
    return $address_fields;
}

?>

Добавляем произвольное поле в письма

Для того, чтобы добавить значение собственного нового поля в письма WooCommerce (письмо выполненного заказа), можно использовать следующий сниппет:

/**
* Добавляем поле в письма заказа
**/
add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys');

function my_custom_checkout_field_order_meta_keys( $keys ) {
$keys[‘My Field 1?] = ‘_my_field_1;
$keys[‘My Field 2?] = ‘_my_field_2?;
return $keys;
}

Вот и все. Мы надеемся, что эта статья помогла вам научиться добавлять собственные произвольные поля на страницу оформления заказа.

Если вы начинаете разбираться с WooCommerce, то не забудьте посетить нашу рубрику WooCommerce, где мы публикуем материалы специально по тематике магазинов на этой платформе.

По всем вопросам и отзывам просьба писать в комментарии ниже.

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

VN:F [1.9.22_1171]
Rating: 4.3/5 (6 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top