如果勾选了复选框,我没有成功尝试按“添加到购物车”的方式将有条件的第二个产品添加到购物车。
我有一个订单,如果选中复选框,我想在购物车中添加第二个产品。我开始尝试通过会话或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");
}
});
});
这是一个成功的方法,让我将正确的产品添加到购物车,“是”警报以及第二个“未定义”警报。所以我认为AJAX在某个地方被破坏了,因为我得到了“未定义”警报。另外,当我将复选框上的id
,name
和value
更改为id="item" name="item" value="AddOnProduct"
并依靠PHP来发送添加到购物车时,我没有得到任何结果send_data = function(item) {}
如果我将submit
按钮更改为do_shortcode('[add_to_cart id="517"]')
,我会收到失败的提醒“未选中复选框”,只会将产品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还是短代码添加到购物车?