WooCommerce 2.1检测选择的运输方式

use*_*689 3 php wordpress woocommerce

我一直在使用以下内容来决定是否需要完成结帐字段......

if ($posted['shipping_method'] == "local_pickup_plus") {
}
Run Code Online (Sandbox Code Playgroud)

自从更新到WooCommerce 2.1后,我的代码不再有效.

我试图回应$ posted ['shipping_method']中存储的值,看看我是否正在检查它是否正确值,但似乎没有任何东西存储在这个变量中了.

我一直在寻找其他检查所选运输方法的方法,但我没有走得太远.

任何帮助将不胜感激.

小智 12

一直在寻找这个,然后决定深入研究WooCommerce文件......

这似乎对我有用:

 $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
 $chosen_shipping = $chosen_methods[0]; 
Run Code Online (Sandbox Code Playgroud)

我正在使用它来设置本地交付的最小总数,在我的functions.php中使用它

add_action( 'woocommerce_cart_calculate_fees','woocommerce_custom_surcharge' );
function woocommerce_custom_surcharge() {
global $woocommerce;


if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;

 $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
 $chosen_shipping = $chosen_methods[0]; 

 $min_spend = 25;
 $cart_total = $woocommerce->cart->cart_contents_total;
 if (($cart_total < 25) AND ($chosen_shipping == 'local_delivery')) {   
    $surcharge = $min_spend-$cart_total;    
    $woocommerce->cart->add_fee( 'Delivery Surchage', $surcharge, true, 'standard' );
}

}
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人.


bod*_*di0 0

来自WooCommerce 2.1 的源代码:

$this->posted['shipping_method'] = isset( $_POST['shipping_method'] ) ? $_POST['shipping_method'] : '';

$_POST['shipping_method']因此,如果未设置变量,$posted['shipping_method']则将为空字符串。我的猜测是您form没有将method属性设置为post(可能会被省略,或者您尝试使用链接来提交产品,而不是form)。