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

时间:2018-08-21 09:44:34

标签: wordpress forms woocommerce checkout

我在WooCommerce自定义结帐字段中验证复选框时遇到问题。我见过this,但对我没有帮助。自定义字段是在表单内部生成的,因此应该可以正常工作。在这种特殊情况下,我不知道是否需要在代码中添加更多内容……我尝试了更多的钩子,但没有任何效果。

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']));
}

1 个答案:

答案 0 :(得分:1)

未选中复选框时,您没有添加条件,您的功能为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']));
    }

}