【问题标题】:WooCommerce 2.6 - Hiding paid shipping when free shipping is triggered by reaching specific amountWooCommerce 2.6 - 当达到特定金额触发免费送货时隐藏支付运费
【发布时间】:2016-10-16 07:18:49
【问题描述】:

我最近在我的商店更新到 WooCommerce 2.6,他们更新了他们的运输系统。在达到特定订单价值并触发免费送货时,我使用它来隐藏付费送货选项:

/**
 * woocommerce_package_rates is a 2.1+ hook
 */
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );

/**
 * Hide shipping rates when free shipping is available
 *
 * @param array $rates Array of rates found for the package
 * @param array $package The package array/object being shipped
 * @return array of modified rates
 */
function hide_shipping_when_free_is_available( $rates, $package ) {

    // Only modify rates if free_shipping is present
    if ( isset( $rates['free_shipping'] ) ) {

        // To unset a single rate/method, do the following. This example unsets flat_rate shipping
        unset( $rates['flat_rate'] );

        // To unset all methods except for free_shipping, do the following
        $free_shipping          = $rates['free_shipping'];
        $rates                  = array();
        $rates['free_shipping'] = $free_shipping;
    }

    return $rates;
}

虽然这不再起作用了。我需要一个新的修复程序,而我并不真正喜欢编码。

有没有人可以解决这个问题?

以上解决方案来自这个网站:
Hide other shipping methods when FREE SHIPPING is available

我猜有些参数在更新运输方式后发生了变化。

我希望有人知道如何解决这个问题。

【问题讨论】:

    标签: php wordpress woocommerce shipping


    【解决方案1】:

    请尝试将您现有的 sn-p 替换为以下。此 sn-p 的详细信息在 this article 中进行了描述。让我知道这是否可以改进。

    add_filter('woocommerce_package_rates', 'xa_hide_shipping_rates_when_free_is_available', 10, 2);
    
    function xa_hide_shipping_rates_when_free_is_available($rates, $package)
    {
        global $woocommerce;
        $version = "2.6";
        if (version_compare($woocommerce->version, $version, ">=")) {
            foreach($rates as $key => $value) {
                $key_part = explode(":", $key);
                $method_title = $key_part[0];
                if ('free_shipping' == $method_title) {
                    $free_shipping = $rates[$key];
                    // Unset all rates.
                    $rates = array();
                    // Restore free shipping rate.
                    $rates[$key] = $free_shipping;
                    return $rates;
                }
            }
        }
        else {
            if (isset($rates['free_shipping'])) {
              // Below code is for unsetting single shipping method/option.
                // unset($rates['flat_rate']);
                $free_shipping = $rates['free_shipping'];
                // Unset all rates.
                $rates = array();
                // Restore free shipping rate.
                $rates['free_shipping'] = $free_shipping;
            }
        }
    
        return $rates;
    }
    

    【讨论】:

    • 这段代码有效吗?因为我看不到 woo 2.6.7 的变化
    【解决方案2】:

    如果您已删除旧的运输方式(运输方式必须使用新的运输区域设置),您可以使用以下 sn-p 删除所有其他运输方式,当免费送货可用时。 (WooCommerce 2.6+):

      /**
       * Hide shipping rates when free shipping is available.
       * Updated to support WooCommerce 2.6 Shipping Zones.
       *
       * @param array $rates Array of rates found for the package.
       * @return array
       */
      function my_hide_shipping_when_free_is_available( $rates ) {
        $free = array();
        foreach ( $rates as $rate_id => $rate ) {
          if ( 'free_shipping' === $rate->method_id ) {
            $free[ $rate_id ] = $rate;
            break;
          }
        }
        return ! empty( $free ) ? $free : $rates;
      }
      add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 ); 
    

    来自updated docs

    【讨论】:

      【解决方案3】:

      好的,以下代码将允许本地取货和免费送货:

      // ##### WOOCOMMERCE - HIDE OTHER SHIPPING METHODS WHEN FREE SHIPPING IS AVAILABLE #####
      add_filter('woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2);
      function hide_shipping_when_free_is_available($rates, $package) {
          $free_yn = 0;
          $pickup_yn = 0;
          foreach($rates as $key => $value) {
              $key_part = explode(":", $key);
              $method_title = $key_part[0];
              if ('free_shipping' == $method_title) {
                  // check if free shipping rate exists
                  $free_yn = 1;
                  $free_shipping = $rates[$key];
                  $free_key = $key;
              }
              if ('local_pickup' == $method_title) {
                  // check if local pickup rate exists
                  $pickup_yn = 1;
                  $local_pickup = $rates[$key];
                  $pickup_key = $key;
              }
          }
          if ($free_yn == 1) {
              // Unset all rates.
              $rates = array();
              // Restore free shipping rate.
              $rates[$free_key] = $free_shipping;
              if ($pickup_yn == 1) {
                  // Restore local pickup rate.
                  $rates[$pickup_key] = $local_pickup;
              }
              return $rates;
          }
          return $rates;
      }
      

      【讨论】:

        猜你喜欢
        • 2018-08-09
        • 2020-11-05
        • 2015-08-14
        • 2016-11-05
        • 2016-11-11
        • 2020-06-22
        • 2021-07-03
        • 2020-11-26
        相关资源
        最近更新 更多