我刚刚实施了自定义运输解决方案。
这取决于购物车中商品的总价。例如:
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)
所以。你遇到过这样的问题吗?你是怎么解决的?非常感谢您的帮助!
如果用户选择“货到付款”付款,我需要禁用特定的运输方式。问题是以下代码仅在我每次重置 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) 如果选中结帐字段中的复选框,我会尝试将运费价格设置为 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。 …