Woocommerce使用ajax修改必填字段

时间:2017-04-01 13:49:58

标签: php ajax wordpress woocommerce

我添加了Woocommerce Billing Adress这样的字段,例如' field_x"根据儿童主题的功能.php的要求。然后添加了两个选项' A和B'同一页。我想这样做:

如果用户选择广播选项A,我的自定义字段将不可见且不需要' 如果用户选择了广播选项B,我的自定义字段将是可见的,并且需要'

我的示例代码:

<?
// Adding fields and radios
add_filter('woocommerce_billing_fields', 'some_woocommerce_billing_fields', 10, 1);

function some_woocommerce_billing_fields($fields) {
    $fields['radio_select'] = array(
            'label' => __('Please select', 'woocommerce'),
            'required' => true,
            'clear' => false,
            'type' => 'radio',
            'options' => array(
                'op_a' => __('op A', 'woocommerce'),
                'op_b' => __('op B', 'woocommerce')));
    $fields['field_x'] = array(
            'label' => __('Field X', 'woocommerce'),
            'placeholder' => _x('Field X', 'placeholder', 'woocommerce'),
            'required' => true,
            'clear' => false);

    return $fields;
}

// PHP functions for Ajax calls
add_action('wp_enqueue_scripts', 'majax_enqueue_scripts');
add_action('wp_ajax_f_remove_req', 'f_remove_req');
add_action('wp_ajax_nopriv_f_remove_req', 'f_remove_req');

function majax_enqueue_scripts() {
    $nonce = wp_create_nonce("nonce_t");
    wp_enqueue_script('url', true);
    wp_localize_script('url', 'urlm', array(
            'ajax_url' => admin_url('admin-ajax.php'),
            'nonce' => $nonce));
}
// Adding filter to remove require
function f_remove_req() {
    if (!wp_verify_nonce($_POST['nonce'], 'nonce_t'))
        die();
    add_filter('woocommerce_process_myaccount_field_field_x', 'remove_reqs', 10, 1);
    die();
}
// Removing require
function remove_reqs($field) {
    $field['field_x']['required'] = false;
    return $field;
}

// Add Ajax function
add_action('woocommerce_after_edit_account_address_form', 'address_script');

function address_script() {
     ?>
     < script >
    jQuery(document).ready(function () {
        jQuery('#radio_select_op_a').change(function () {
            jQuery('#field_x_field').hide();

            jQuery.post(urlm.ajax_url, {
                'action' : 'f_remove_req',
                'nonce' : urlm.nonce
            },
                function (response) {
                console.log(response);
            });
        });
        jQuery('#radio_select_op_b').change(function () {
            jQuery('#field_x_field').show();

            jQuery.post(urlm.ajax_url, {
                'action' : 'f_add_req',
                'nonce' : urlm.nonce
            },
                function (response) {
                console.log(response);
            });
        });
    });
     </ script>
     <?
}
?>

我可以添加字段,ajax功能正在运行。

但是当我点击&#34; Save&#34;时,php总是将filed_x-&gt; require选项发送为true。

有什么问题?我怎样才能做到这一点? 谢谢。

0 个答案:

没有答案