WooCommerce:自定义折扣在结帐期间消失

时间:2019-02-18 15:23:13

标签: javascript php ajax wordpress woocommerce

一段时间以来,我一直在尝试在WooCommerce商店上实施自定义折扣,方法是循环所有产品并使用set_price()设置新价格,或者通过使用add_fee()添加负费用。两种方法都可以在购物车页面上使用,但是在结帐时,我可以看到几秒钟的折扣价,但是当纺车最终确定旧的正常价格时,它取代了折扣(费用完全消失了)。

我在childs functions.php中尝试过的许多代码示例:

add_action('woocommerce_before_calculate_totals', 'cart_item_discount', 10, 1 );

function cart_item_discount( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Avoiding hook repetition (when using price calculations for example)
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop Through cart items
    foreach ( $cart->get_cart() as $cart_item ) {
        $original_price   = $cart_item['data']->get_price(); // Get original product price
        $discounted_price = $original_price / 2; // 50 % of discount
        $cart_item['data']->set_price( $discounted_price );
    }
}

我一直在进行故障排除,据我所知,进入结帐后的1-2秒内,通过?wc-ajax=update_order_review进行AJAX调用,这是导致覆盖的原因。呼叫返回状态200,其中包含片段,这些片段包含旧的常规价格而不是新的常规价格。

如何在结帐页面上禁用此AJAX通话,以便折扣代码正常工作?

我在本地和生产服务器上都尝试过。我尝试用新数据库安装新的全新WordPress / WooCommerce安装,删除了所有其他插件。使用WordPress 5.0.3,WooCommerce 3.5.4,Storefront 2.4.2的子主题。

0 个答案:

没有答案