В прошлых статьях мы рассказали о том, как добавить поля к уже существующим на странице оформления заказа (оплаты и доставки), но что если понадобится добавить какое-то свое поле? В сегодняшней статье мы покажем, как добавить новое поле на страницу оформления заказа в 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]](https://wpincode.com/wp-content/uploads/2015/04/WooCommerce-Codex-Checkout-Field-Hook1.png)
Далее, нам необходимо будет проверить это поле в момент отправки формы заказа пользователем. В качестве примера мы сделаем его обязательным:
/**
* Выполнение формы заказа
*/
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]](https://wpincode.com/wp-content/uploads/2015/04/WooCommerce-Codex-Checkout-Field-Notice1.png)
И, наконец, сохраняем новое поле в произвольное поле заказа, используя следующий код:
/**
* Обновляем метаданные заказа со значением поля
*/
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]](https://wpincode.com/wp-content/uploads/2015/04/checkout_field_custom_field_admin11.png)
Делаем поле ввода телефона не обязательным
<?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, где мы публикуем материалы специально по тематике магазинов на этой платформе.
По всем вопросам и отзывам просьба писать в комментарии ниже.
Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.
