WooCommerce 2.1检测选择的运输方式

时间:2014-03-13 15:38:25

标签: php wordpress woocommerce

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

if ($posted['shipping_method'] == "local_pickup_plus") {
}

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

我试图回应$ posted ['shipping_method']中存储的值,看看我是否按照正确的值检查它,但似乎没有任何内容存储在此变量中。

我一直在寻找其他方法来检查选择的送货方式,但我没有走得太远。

非常感谢任何协助。

3 个答案:

答案 0 :(得分:11)

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

这似乎对我有用:

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

我正在使用它来设置本地交付的最小总数,在我的函数中使用它.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' );
}

}

希望这可以帮助别人。

答案 1 :(得分:0)

来自WooCommerce 2.1的source code

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

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

答案 2 :(得分:0)

$ _ POST ['shipping_method']是一个数组,$ whatever = $ _POST ['shipping_method'],$ whatever [0] = value