如果选中复选框,我在尝试按“添加到购物车”的方式将有条件的第二个产品添加到购物车时未成功 .
我有一个订单,如果选中复选框,我想在购物车中添加第二个产品 . 我开始尝试通过会话或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'警报 . 另外,当我将复选框上的 id
, name
和 value
更改为 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还是短代码添加到购物车?