相关疑难解决方法(0)

在 Woocommerce 中的结帐更新 ajax 事件中刷新缓存的运输方式

我刚刚实施了自定义运输解决方案。

这取决于购物车中商品的总价。例如:

if total is < 20   -> display free shipping
if total is >= 20  -> paid delivery
Run Code Online (Sandbox Code Playgroud)

但是我有 woocommerce 缓存的问题......我认为事实是 woocommerce 缓存了运费,而不是考虑订单数量的变化。那么问题出在calculate_shipping_for_package()方法上吗?

如果我启用运输调试模式,一切正常,没有任何更新。

我试图禁用缓存,但没有成功。

add_action('woocommerce_checkout_update_order_review', function() {
    $packages = WC()->cart->get_shipping_packages();
    foreach ($packages as $key => $value) {
        $shipping_session = "shipping_for_package_$key";
        unset(WC()->session->$shipping_session);
    }
}, 10, 2);
Run Code Online (Sandbox Code Playgroud)

所以。你遇到过这样的问题吗?你是怎么解决的?非常感谢您的帮助!

php ajax wordpress woocommerce shipping-method

4
推荐指数
1
解决办法
4197
查看次数

根据 Woocommerce 中选择的付款方式禁用运输方式

如果用户选择“货到付款”付款,我需要禁用特定的运输方式。问题是以下代码仅在我每次重置 WooCommerce 瞬态并刷新时才有效。它不适用于来回用户选择。

add_filter( 'woocommerce_package_rates', 'alter_shipping_methods', 100 );
function alter_shipping_methods( $rates ) {

    $chosen_gateway = WC()->session->chosen_payment_method;

    // If payment is Cash on delivery remove specific shipping 
    if($chosen_gateway == 'cod') {

        foreach ( $rates as $rate_id => $rate ) {
           if ( $rate->label === 'Hrvatska pošta' ) {
              unset( $rates[ $rate_id ] );
            }
       }

    }

    return $rates;

}
Run Code Online (Sandbox Code Playgroud)

我确实有这个应该触发的代码,当我点击选项时,我会在控制台中看到输出。

jQuery(document.body).on('change', 'input[name="payment_method"]', function() {
    console.log('Payment method changed');
    jQuery('body').trigger('update_checkout');
});
Run Code Online (Sandbox Code Playgroud)

我试过这个,它不起作用

function action_woocommerce_checkout_update_order_review($array, $int) {
    WC()->cart->calculate_shipping();
    return;
}
add_action('woocommerce_checkout_update_order_review', 'action_woocommerce_checkout_update_order_review', 10, 2); …
Run Code Online (Sandbox Code Playgroud)

php ajax jquery shipping woocommerce

3
推荐指数
1
解决办法
5632
查看次数

如果在 WooCommerce Checkout 中选中自定义复选框,则删除运费

如果选中结帐字段中的复选框,我会尝试将运费价格设置为 0.00 美元。

当前尝试:

function no_shipping_for_own_ups($rates,$package) {
    foreach ($rates as $rate) {
        //Set the price
        $rate->cost = 0;
    }
    return $rates;
}

function woo_add_cart_ups_y_n_fee( $cart ){
    if ( ! $_POST || ( is_admin() && ! is_ajax() ) ) {
        return;
    }

    if ( isset( $_POST['post_data'] ) ) {
        parse_str( $_POST['post_data'], $post_data );
    } else {
        $post_data = $_POST;
    }

    if (isset($post_data['billing_ups_yn'])) {
        add_filter( 'woocommerce_package_rates','no_shipping_for_own_ups', 99, 2 );
    }
}
add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_ups_y_n_fee', 43, 1 );
Run Code Online (Sandbox Code Playgroud)

作为$post_data['billing_ups_yn']我设置为在触发时更新结帐的复选框。

只需选中复选框,然后应用过滤器将运费设置为 ​​0。 …

php ajax jquery shipping woocommerce

2
推荐指数
1
解决办法
3559
查看次数

标签 统计

ajax ×3

php ×3

woocommerce ×3

jquery ×2

shipping ×2

shipping-method ×1

wordpress ×1