【问题标题】:Disable only flat rate shipping method when free shipping is available in Woocommerce当 Woocommerce 中提供免费送货时,仅禁用统一费率送货方式
【发布时间】:2019-05-31 00:23:06
【问题描述】:

我正在使用Hide specifics Flat Rates when Free Shipping is available in WooCommerce 3 稍微更改了答案代码来隐藏除一种以外的所有运输方式。我想要显示的唯一方法是来自"Woocommerce Advanced Shipping" plugin 的速率。

我正在使用正确的费率 ID 等...

一切正常,除了当客户尝试点击该送货方式时,它不会保持选中状态。它只是跳回免费送货。

我已经尝试过调试,还尝试了带有原生 woocommerce 统一费率 ID 的代码,它显示/能够选择它就好了。

add_filter( 'woocommerce_package_rates', 'conditionally_hide_shipping_methods', 100, 2 );
function conditionally_hide_shipping_methods( $rates, $package ) {

    $flat_rates_express = array( '2588' );

    $free = $flat2 = array();
    foreach ( $rates as $rate_key => $rate ) {
        // Updated Here To 
        if ( in_array( $rate->id, $flat_rates_express ) )
            $flat2[ $rate_key ] = $rate;
        if ( 'free_shipping:12' === $rate->id )
            $free[ $rate_key ] = $rate;
    }
        return ! empty( $free ) ? array_merge( $free, $flat2 ) : $rates;
}

我要保持显示的 ID:“2588”(来自插件的自定义运费)

当可以免费送货时,我如何禁用统一运费方式或保持自定义运费(来自插件)?

【问题讨论】:

  • 您的代码有效,但问题是 '2588' 不是正确的运费 ID 参考...请参阅 this screenshot,它显示了如何使用浏览器代码检查器获取正确的运费 ID。
  • @LoicTheAztec 这是显示值为“2588”的屏幕截图我应该使用“shipping_method_0_2588”吗? gyazo.com/35ae5e3f9cd9f1095fbc0391423c0bec
  • 您的运输插件正在制作非常奇怪的运输方式费率 ID……它似乎是 2588(值),但不是 shipping_method_0_2588,它是 DOM html 标记 ID。您的代码有效(使用 woocommerce 运输方式测试),但可能是您的插件运输方式费率 ID 不...
  • @LoicTheAztec 是的,它适用于本地 woocom 运费。至于插件运费,基本功能也可以正常工作(它隐藏了所有其他费率)。但它只是不让我点击它。有没有办法在不联系开发人员的情况下找到答案?
  • 或者@sormano 也许你可以插话?

标签: php wordpress woocommerce cart shipping-method


【解决方案1】:

由于您有 3 种送货方式,1 种免费送货,1 种统一费率和 1 种自定义“2588”,因此可以在提供免费送货时隐藏统一费率送货方式:

add_filter( 'woocommerce_package_rates', 'free_shipping_disable_flat_rate', 1000, 2 );
function free_shipping_disable_flat_rate( $rates, $package ) {
    // Here your free shipping rate Id
    $free_shipping_rate_id = 'free_shipping:12';

    // When your Free shipping method is available
    if ( array_key_exists( $free_shipping_rate_id, $rates ) ) {
        // Loop through shipping methods rates
        foreach ( $rates as $rate_key => $rate ) {
            // Removing "Flat rate" shipping method
            if ( 'flat_rate' === $rate->method_id ){
                unset($rates[$rate_key]);
            }
        }
    }
    return $rates;
}

代码在您的活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。

刷新运输缓存:

  1. 此代码已保存在您的 function.php 文件中。
  2. 在运输区域设置中,禁用/保存任何运输方式,然后启用返回/保存。
    您已完成,您可以对其进行测试。

【讨论】:

  • 非常感谢!我以前见过你的贡献,如果没有你兄弟,这些部分就不一样了!
猜你喜欢
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 2018-03-05
  • 2015-08-14
  • 1970-01-01
  • 2020-06-22
  • 2016-11-11
相关资源
最近更新 更多