1) Для обычных или настраиваемых полей выставления счетов и доставки вы можете использовать woocommerce_billing_fields
или woocommerce_shipping_fields
действия на странице оформления заказа следующим образом.
Это сделает обязательным поле для извлечения без каких-либонужно добавить скрипт проверки и сохранить его в заказе.Поле также появится в разделе «Поле ввода адресов для редактирования моей учетной записи».
Некоторые пояснения к аргументам:
- Класс
'update_totals_on_change'
позволяет запускать «извлечение обновления» при изменении. - Атрибут
'required'
делает поле обязательным или нет - Атрибут
'priority'
позволяет изменить местоположение поля.
Код:
add_filter( 'woocommerce_shipping_fields', 'display_shipping_region_checkout_field', 20, 1 );
function display_shipping_region_checkout_field( $fields ) {
$fields['shipping_region'] = array(
'type' => 'select',
'label' => __("Region", "woocommerce") ,
'class' => array('form-row-wide', 'update_totals_on_change'),
'required' => true,
'options' => array(
'' => __("Choose a region please"),
'option-1' => __("Option 01"),
'option-2' => __("Option 02"),
'option-3' => __("Option 03"),
),
'priority' => 100,
'clear' => true,
);
return $fields;
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы).Проверено и работает.
![enter image description here](https://i.stack.imgur.com/pW0km.png)
![enter image description here](https://i.stack.imgur.com/vJBep.png)
2) В отдельных случаях вам нужноиспользовать фильтр woocommerce_default_address_fields
.Этот фильтр применяется ко всем полям выставления счетов и доставки по умолчанию * ( см. Документацию ).Используются только некоторые поля проверки по умолчанию.
3) Вы также можете использовать woocommerce_checkout_fields
с $fields
в качестве аргумента функции ( см. Документацию ) .
4) Для других пользовательских полей извлечения вы можете использовать один из следующих хуков с функцией woocommerce_form_field ():
woocommerce_before_checkout_billing_form
имеет $checkout
в качестве аргумента функции woocommerce_before_checkout_billing_form
имеет $checkout
в качестве аргумента функции woocommerce_before_checkout_shipping_form
имеет $checkout
в качестве аргумента функции woocommerce_before_checkout_shipping_form
имеет $checkout
в качестве аргумента функции woocommerce_before_order_notes
имеет $checkout
в качестве аргумента функции woocommerce_after_order_notes
имеет $checkout
в качестве аргумента функции
Код, который отображает поле, проверяет поле и сохраняет поле взаказ:
// Display field
add_action( 'woocommerce_after_checkout_shipping_form', 'display_shipping_region_after_checkout_shipping_form', 10, 1 );
function display_shipping_region_after_checkout_shipping_form ( $checkout ) {
woocommerce_form_field( 'shipping_region', array(
'type' => 'select',
'label' => __("Region", "woocommerce") ,
'class' => array('form-row-wide','update_totals_on_change'),
'required' => true,
'options' => array(
'' => __("Choose a region please"),
'option-1' => __("Option 01"),
'option-2' => __("Option 02"),
'option-3' => __("Option 03"),
),
'priority' => 100,
'clear' => true,
), $checkout->get_value( 'shipping_region' ) );
}
// Field Validation
add_action('woocommerce_checkout_process', 'shipping_region_custom_checkout_field_validation');
function shipping_region_custom_checkout_field_validation() {
if ( isset($_POST['shipping_region']) && empty($_POST['shipping_region']) )
wc_add_notice( __( 'Please select something into Region field.' ), 'error' );
}
// Save Field value
add_action( 'woocommerce_checkout_create_order', 'action_checkout_create_order_callback', 10, 2 );
function action_checkout_create_order_callback( $order, $data ) {
if ( isset($_POST['shipping_region']) && empty($_POST['shipping_region']) ) {
$order->update_meta_data( '_shipping_region', esc_attr($_POST['shipping_region']) );
if( $order->get_user_id() > 0 )
update_user_met( $order->get_user_id(), 'shipping_region', esc_attr($_POST['shipping_region']) );
}
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы).Протестировано и работает.
WooCommerce Документация: Настройка полей оформления заказа с помощью действий и фильтров