Woocommerce aJax将优惠券代码应用于购物篮

时间:2017-01-11 14:27:12

标签: php ajax wordpress woocommerce

我试图按下按钮将优惠券代码应用到购物篮中。 我有以下代码: -

coupon = jQuery(this).data('coupon');
data = {coupon_code : coupon};
jQuery.post( "?wc-ajax=apply-coupon", { coupon_code: coupon }).done(function( data ) {
    alert( "Data Loaded: " + data );
});

我可以看到以下数据正在被解析到服务器: -

coupon_code: 10percentdiscount

10percentdiscount存在。

一旦发送请求,服务器就不会发回响应。

我是否正确提出此请求或是否有其他方式?

提前谢谢。

2 个答案:

答案 0 :(得分:2)

我会这样做:

在header.php中定义ajax url或在页面中添加优惠券

<script type="text/javascript" language="javascript">
var ajax_url = "<?php bloginfo('url'); ?>/wp-admin/admin-ajax.php";
</script>

在function.php中,您必须定义ajax调用

function implement_ajax() {
    include(TEMPLATEPATH . '/ajax_return.php');
}

add_action('wp_ajax_my_special_action', 'implement_ajax');
add_action('wp_ajax_nopriv_my_special_action', 'implement_ajax');

在ajax_return.php中,您过去的代码将优惠券添加到woocommerce:

if (isset($_POST['couponcode']))
    { apply_coupon($_POST['couponcode']); }; 

function apply_coupon($couponcode) { 
    global $woocommerce; WC()->cart->remove_coupons();
    $ret = WC()->cart->add_discount( $couponcode ); 
    $array = array('return' => $ret); print_r($array); 
}
exit;

你的jQuery.post将成为这个:

<script type="text/javascript">
jQuery(function(){
    coupon = jQuery(this).data('coupon');
    jQuery.post(ajax_url, {action : 'my_special_action', couponcode : coupon}, return_function, 'JSON');
});

function return_function(data)
{
   console.log(data.return); //contains true if coupon was applied
}
</script>

如果需要,请致电return_function以管理回复。

答案 1 :(得分:1)

您无需在functions.php中添加自定义代码。 Woocommerce支持本地通过AJAX添加优惠券(请参见下文)。

您的代码中的错误:

  1. 您忘记发送随机数(安全性参数);
  2. apply_coupon而不是apply-coupon(下划线与破折号);
  3. 您的网址应以斜杠“ / ?wc-ajax = apply_coupon”开头;

正确版本:

var data = {
  coupon_code: jQuery(this).data('coupon'), 
  security: '<?php echo wp_create_nonce("apply-coupon") ?>'
};
jQuery.post('/?wc-ajax=apply_coupon', data).done(function(data) {
  alert("Data Loaded: " + data);
});