必需的自定义 WooCommerce 复选框结帐字段不会验证自身



我在验证WooCommerce自定义结帐字段中的复选框时遇到问题。我已经看到了这个,但它并没有真正帮助我。自定义字段是在表单内部生成的,因此它应该可以正常工作。我不知道在这种特殊情况下是否需要放置比我的代码更多的东西......我又尝试了几个钩子,但它没有任何效果。

add_action('woocommerce_review_order_before_submit', 'my_required_checkout_field');
function my_required_checkout_field( ) {
woocommerce_form_field( 'przetwarzanie_danych_do_zamowienia', array(
'type'          => 'checkbox',
'class'         => array('input-checkbox'),
'label'         => __('REQUIRED ONE.'),
'required'  => true,
), WC()->checkout->get_value( 'przetwarzanie_danych_do_zamowienia' ));
}
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
global $woocommerce;
}

/**
* Update the order meta with field value
**/
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 ($_POST['przetwarzanie_danych_do_zamowienia']) update_post_meta( $order_id, 'Oświadczenie o zapoznaniu się z regulaminem',     esc_attr($_POST['przetwarzanie_danych_do_zamowienia']));
}

未选中复选框时您没有添加条件,您有空函数my_custom_checkout_field_process所以这是完整的工作代码:

add_action('woocommerce_review_order_before_submit', 'my_required_checkout_field');
function my_required_checkout_field()
{
woocommerce_form_field('przetwarzanie_danych_do_zamowienia', array(
'type' => 'checkbox',
'class' => array('input-checkbox'),
'label' => __('REQUIRED ONE.'),
'required' => true,
), WC()->checkout->get_value('przetwarzanie_danych_do_zamowienia'));
}
/**
* Process the checkout
**/
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process()
{
// Check if set, if its not set add an error.
if (!$_POST['przetwarzanie_danych_do_zamowienia']) {
wc_add_notice(__('Please select required box'), 'error');
}
}
/**
* Update the order meta with field value
**/
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 ($_POST['przetwarzanie_danych_do_zamowienia']) {
update_post_meta($order_id, 'Oświadczenie o zapoznaniu się z regulaminem', esc_attr($_POST['przetwarzanie_danych_do_zamowienia']));
}
}

最新更新