Woocommerce требует полей
Ниже приведен код, который я использую, чтобы сделать поле Штатов обязательным для всех мест, но для конкретных стран, таких как Германия, оно все еще не является обязательным. Я хочу сделать его обязательным для всех.
add_filter( 'woocommerce_checkout_fields', 'custom_override_default_address_fields' );
function custom_override_default_address_fields($fields){
$fields['billing']['state']['required'] = true;
$fields['shipping']['state']['required'] = true;
}
return $fields;
}
2 ответа:
Я выяснил, что WordPress сам удаляет требуемое поле состояния во многих странах (например, в Кувейте), и его нельзя сделать требуемым с помощью,
$fields['billing']['state']['required'] = true; $fields['shipping']['state']['required'] = true;
Что я сделал, я проверил размер входного значения в раскрывающемся списке состояние (когда пользователь нажимает кнопку заказа), и если значение было пустым, я показал ошибку.
function my_custom_checkout_field_process() { // You can make your own control here if ( ! $_POST[ 'billing_state' ] ) { wc_add_notice( __('PLEASE SELECT A STATE' ), 'error' ); } }
Обратите внимание, что ваш код неверен, удалите лишнее '
}
'.Используйте
woocommerce_default_address_fields
вместоwoocommerce_checkout_fields
:add_filter('woocommerce_default_address_fields', 'custom_override_default_address_fields'); function custom_override_default_address_fields( $fields ) { $fields['state']['required'] = false; return $fields; }
Если у вас есть другие фильтры, попробуйте добавить приоритет (приоритет 20 будет выполняться после кода с приоритетом 10):
add_filter('woocommerce_default_address_fields', 'custom_override_default_address_fields', 100);
И если вам действительно нужно использовать
woocommerce_checkout_fields
, то используйтеbilling_state
иshipping_state
вместоstate
:add_filter('woocommerce_checkout_fields', 'custom_override_checkout_fields'); function custom_override_checkout_fields( $fields ) { $fields['billing']['billing_state']['required'] = true; $fields['shipping']['shipping_state']['required'] = true; return $fields; }