Woocommerce结帐 - 使用AJAX添加折扣

时间:2015-08-11 05:25:37

标签: php jquery ajax wordpress woocommerce

我试图让Woocommerce结帐页面在您的订单部分的评论中添加折扣,由更改元素的innerHTML触发。

我使用的JavaScript是:

var discount = 0;
function innerHTMLChanged() {
    if (jQuery('#hideDiscount').html() != "oldText") {

        console.log("innerHTML has changed!"); 
        discount = jQuery('#hideDiscount').html();

        jQuery.ajax({
            url: "http://example.site/apply-discount.php",
            type: "POST",
            data: {
                action: jQuery('#hideDiscount').html()
            }
        }).done(function(data) {
            alert( data.message );
        });
    }
}

// fires every half a second
setInterval(innerHTMLChanged, 500);

apply-discount.php文件包含:

<?php


$discount = $_POST['action'];
$reverseDiscount = $discount * -1;

function woo_add_cart_fee() {
    global $woocommerce;

    $woocommerce->cart->add_fee( __('Discount', 'woocommerce'), $reverseDiscount );
}

add_action('woocommerce_cart_calculate_fees','woo_add_cart_fee');

?>

执行代码时,Chrome控制台正在输出以下内容:

POST http://example.site/apply-discount.php 500 
(Internal Server Error)
m.ajaxTransport.send @ jquery.js?ver=1.11.2:4
m.extend.ajax @ jquery.js?ver=1.11.2:4
innerHTMLChanged @ (index):357

有人可以告诉我导致内部服务器错误的原因吗?

提前致谢。

以下是控制台的屏幕截图,显示了带有参数名称的请求标题:&#34; action&#34;和价值:&#34; 0.00&#34;这是正确的POST数据,响应标题显示&#34;内部服务器错误&#34;。所以AJAX请求正在发送,错误是响应PHP ..?

here

1 个答案:

答案 0 :(得分:0)

在Wordpress中使用AJAX时,您需要在能够使用任何全局变量和/或函数之前加载WP。

在您通过AJAX发布的PHP文件的顶部,包括以下行: require_once( dirname( dirname( __FILE__ ) ) . '/wp-admin/wp-load.php' );

现在已加载WP,您可以使用其所有光荣的功能。