WooCommerce免费送货超过5磅

时间:2014-03-10 20:46:23

标签: php wordpress woocommerce shipping orders

我正在尝试编写一个只提供免费送货的功能(删除所有其他选项),如果订单超过5磅(80盎司),但它不起作用,虽然代码似乎是正确的。

这就是我所拥有的:

  // Hide ALL shipping options but FREe when over 80 ounches (5 pounds)
add_filter( 'woocommerce_available_shipping_methods', 'ship_free_if_over_five_pounds' , 10, 1 );

/**
* Hide ALL Shipping option but free if over 5 pounds
*
* @param array $available_methods
*/
function ship_free_if_over_five_pounds( $available_methods ) {
    global $woocommerce;
    $whats_the_weight = $woocommerce->cart->cart_contents_weight;   

    if($whats_the_weight != 80) :

        // Get Free Shipping array into a new array
        $freeshipping = array();
        $freeshipping = $available_methods['free_shipping'];

        // Empty the $available_methods array
        unset( $available_methods );

        // Add Free Shipping back into $avaialble_methods
        $available_methods = array();
        $available_methods[] = $freeshipping;

    endif;

    return $available_methods;
}

有什么想法?

该代码基于此网站上的示例#19
My 25 Best WooCommerce Snippets For WordPress Part 2

2 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但我最近有这个替代方案......

首先,在您的代码"如果订单超过5磅(80盎司)" ,您的 public function afterPlaceOrder($observer) { $helper = Mage::helper('marketplace'); $lastOrderId = $observer->getOrder()->getId(); } 声明应为 if 而不是 if($whats_the_weight > 80) ...但我认为如果使用WooCommerce 2.6 +,您的代码有点过时。

!=使用global $woocommerce;后,您可以使用: $woocommerce->cart->cart_contents_weight;

我有更多最新的WooCommerce 2.6+代码片段based on this official thread。你应该试一试:

WC()->cart->cart_contents_weight;

对于WooCommerce 2.5,你应该试试这个:

add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );

function my_hide_shipping_when_free_is_available( $rates ) {

    $cart_weight = WC()->cart->cart_contents_weight; // Cart total weight

    $free = array();
    foreach ( $rates as $rate_id => $rate ) {
        if ( 'free_shipping' === $rate->method_id && $cart_weight > 80 ) { // <= your weight condition
            $free[ $rate_id ] = $rate;
            break;
        }
    }
    return ! empty( $free ) ? $free : $rates;
}

答案 1 :(得分:0)

已经制作了一个插件,您可以设置免费送货的最大重量!

看看:http://wordpress.org/plugins/woocommerce-advanced-free-shipping/