【问题标题】:Hide shipping method in the woocommerce order confirmation page在 woocommerce 订单确认页面中隐藏运输方式
【发布时间】:2020-10-07 06:32:08
【问题描述】:

我需要根据是否使用折扣代码隐藏送货方式。 但我没有找到如何在订单确认页面中隐藏送货方式。 我看到了that answer 但它什么也没做,我尝试了这段代码来验证:

add_filter( 'woocommerce_package_rates', 'custom_shipping_rates', 100, 2 );
function custom_shipping_rates( $rates, $package ) {
    exit();
}

应该阻止页面显示但页面加载良好。

编辑:过滤器永远不会被调用,因为 wordpress 使用存储在 class-wc-shipping.php 中的费率:

if ( ! is_array( $stored_rates ) || $package_hash !== $stored_rates['package_hash'] || 'yes' === get_option( 'woocommerce_shipping_debug_mode', 'no' ) ) 
{
            
...
            // Filter the calculated rates.
            $package['rates'] = apply_filters( 'woocommerce_package_rates', 
           $package['rates'], $package );
...
} 
else
{
            $package['rates'] = $stored_rates['rates'];
}

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    除非您有旧的 wc 版本,否则该代码应该可以正常工作。您可以通过在 /plugins/woocommerce 代码库中搜索它来验证该钩子是否存在。如果没有找到,则说明更新有问题。

    如果你找到它并且你的代码仍然无法工作,那么唯一的另一个原因是你将这段代码片段放在一个永远不会被解雇的地方,或者你来得太晚了。

    能否请您添加代码的放置位置和方式,以便我们更好地了解发生了什么?

    编辑:

    如果您查看您复制的片段上方,您会看到:

    // Get rates stored in the WC session data for this package.
    $wc_session_key = 'shipping_for_package_' . $package_key ;
    $stored_rates   = WC()->session->get( $wc_session_key );
    

    这让我认为这是与会话相关的事情。因此,为了进行全面测试,您需要使用其他浏览器打开网站,清空浏览器缓存 + cookie 或使用匿名浏览器会话

    【讨论】:

    • 我将此代码放在我的主题functions.php 中,其他过滤器可以完美运行。我的 wordpress 是最新的(5.5.1)。当然,我也删除了缓存。
    • 我只是发现 wordpress 使用 $stored_rates['rates'];而不是重新计算,然后它不会调用 woocommerce_package_rates 过滤器。还有其他过滤器吗?
    • 好的,但我需要它与会话无关。
    • 空气中有一些混乱,它是并且它将与会话相关。我想说的是,您需要清除缓存/cookie 或更改浏览器以查看您的代码是否正常工作。之后,所有新会话都将具有您将在挂钩代码中定义的正确 shipping_rates
    • 我理解但我需要一个动态的东西,如果用户添加了特定的折扣代码,我必须有特定的送货方式,如果删除代码,送货方式必须改变。
    【解决方案2】:

    有一个技巧可以禁用缓存,我将其限制为“更新订单审查”操作:

    if (preg_match('#update_order_review#i',$_SERVER['REQUEST_URI']))
    {
        add_filter('transient_shipping-transient-version', function($value, $name) 
        { 
            return false; 
        }, 10, 2);
    }
    
    add_filter( 'woocommerce_package_rates', 'custom_shipping_rates', 100, 2 );
    function custom_shipping_rates( $rates, $package )
    {
        //get coupons
        $reduc=WC()->cart->get_coupons();
        $hidemr=isset($reduc['thediscountcode']);
    
        if ($hidemr)
        {
            foreach($rates as $k=>$v)
            {
                if (preg_match('#MethodLabelToHide#i',$v->get_label()))
                    unset($rates[$k]);
            }
        }
        
        return $rates;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 1970-01-01
      • 2018-02-05
      • 2020-12-20
      • 2014-07-05
      • 2018-04-18
      • 2021-02-17
      • 2019-10-17
      • 2021-02-04
      相关资源
      最近更新 更多