如果选中复选框,我在尝试按“添加到购物车”的方式将有条件的第二个产品添加到购物车时未成功 .

我有一个订单,如果选中复选框,我想在购物车中添加第二个产品 . 我开始尝试通过会话或cookie添加值 . 这适用于单个产品页面,但不适用于添加到购物车的短代码[add_to_cart id =“XX”] . 我认为AJAX是我最好的机会,但我对AJAX缺乏经验,无法判断它是短代码还是我 .

这是我在复选框提交中获得添加到购物车的便宜方式 .

输入:

function sample_input(){

        echo '
            <form id="myform" action="">
            Check this box: 
            <input type="checkbox" id="add-to-cart" name="16379" /><input type="submit" value="Submit" /></div></form>
                ';
}

加载脚本:

function enqueue_scripts_styles_init() {
        wp_enqueue_script( 'ajax-script', plugins_url( '/js/ajax-testing-script.js', __FILE__ ), array('jquery'), 1.0 ); // jQuery will be included automatically
        wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); // setting ajaxurl
    }
    add_action('init', 'enqueue_scripts_styles_init');

JQuery的:

jQuery(function($){

    send_data = function(item) {

        $.post(ajax_object.ajaxurl, {

            dataType: "json",
            data: {'item' : item},
            type: "POST",
            cache: false

        }).done(function(data, status, xml) {

            var obj = jQuery.parseJSON(data);
            alert(obj.success);

        }).fail(function(jqXHR, textStatus, errorThrown) {
        }).always(function() {
        });

    }


    $("#show").click(function() {

        var $check = $('input#item');

        if ($check.is(":checked")) {
            alert("Yes");
            send_data($check.val()); 
        } else {
            alert("box is not checked");
        }


    });


});

这是一个成功的方法,让我得到正确的产品添加到购物车,"Yes"警报加上'undefined'的第二个警报 . 所以我认为AJAX被破坏了,因为我得到了'undefined'警报 . 另外,当我将复选框上的 idnamevalue 更改为 id="item" name="item" value="AddOnProduct" 并依靠PHP来发送添加到购物车时,我得不到 send_data = function(item) {} 的结果

如果我将 submit 按钮更改为 do_shortcode('[add_to_cart id="517"]') ,则会收到失败的警报"box is not checked",并且只会将产品ID添加到购物车 . 所以我认为AJAX没有设置为同时处理添加到购物车功能和我的ajax . 最后,这是最终代码应该做的事情:

echo '
        <form id="myform" action="">
        Check this box: 
        <input type="checkbox" id="item" name="item" value="AddOnProduct" />
<div id="show">' . do_shortcode('[add_to_cart id="517"]') . '</div></form>';

PHP:

function ajax_action_stuff() {
        if (isset($_REQUEST['item'])) {
            WC()->cart->add_to_cart( 16379 ); //2nd product
        } else {
            return;
        }
    }

    add_action( 'wp_ajax_ajax_action', 'ajax_action_stuff' );
    add_action( 'wp_ajax_nopriv_ajax_action', 'ajax_action_stuff' );

(#show)click() 上,如果选中了"item",ajax应该将产品ID发送到购物车并捕获第二个ID以发送到购物车 . 我想如果我能成功地将值传回PHP,我可以在我的ajax函数中执行命令 . 它是AJAX还是短代码添加到购物车?