当 WooCommerce 购物车包含虚拟产品时,如何隐藏结帐日期选择器?

Posted

技术标签:

【中文标题】当 WooCommerce 购物车包含虚拟产品时,如何隐藏结帐日期选择器?【英文标题】:How to hide checkout date picker when WooCommerce cart contains a virtual product? 【发布时间】:2022-01-17 05:15:26 【问题描述】:

我需要停用由插件生成的结帐日期选择器购物车上的产品是虚拟的。

这是他们为此提供的钩子:

 apply_filters('woocommerce_delivery_disabled_dates', $disableDates);

根据这些信息,这是我的代码尝试:

add_filter( 'woocommerce_checkout_fields' , 'disable_dates' );
         
function disable_dates( $fields ) 
        
   $only_virtual = true;
    
   foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) 
      // Check if there are non-virtual products
      if ( ! $cart_item['data']->is_virtual() ) $only_virtual = false;   
   
     
    if( $only_virtual ) 
       apply_filters(‘woocommerce_delivery_disabled_dates’, $disableDates);
     
     
     return $fields;

但是这并没有给出预期的结果,有什么建议可以在购物车包含虚拟产品时隐藏结帐日期选择器吗?

【问题讨论】:

请问您有什么问题 $disableDates 未定义。我相信这应该是$fields - 或者我更喜欢在您的代码中将$fields 重命名为$disableDates 【参考方案1】:

无需使用woocommerce_checkout_fields钩子, 逻辑可以应用在适当的钩子中。

所以你得到:

function filter_woocommerce_delivery_disabled_dates( $disableDates )   
    // WC Cart NOT null
    if ( ! is_null( WC()->cart ) ) 
        // Loop through cart items
        foreach ( WC()->cart->get_cart_contents() as $cart_item_key => $cart_item ) 
            // Check if there are virtual products
            if ( $cart_item['data']->is_virtual() ) 
                $disableDates = true;
                break;
            
        
    
    
    return $disableDates;

add_filter( 'woocommerce_delivery_disabled_dates', 'filter_woocommerce_delivery_disabled_dates', 10, 1 );

【讨论】:

【参考方案2】:

主要问题是 $disabledDates 未定义 - 但是我会将 $fields 更改为 $disableDates 因为它更有意义。见下文:

apply_filters('woocommerce_delivery_disabled_dates', $disableDates);

add_filter( 'woocommerce_checkout_fields' , 'disable_dates' );
         
function disable_dates( $disableDates ) 
        
   $only_virtual = true;
    
   foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) 
      // Check if there are non-virtual products
      if ( ! $cart_item['data']->is_virtual() ) $only_virtual = false;   
   
     
    if( $only_virtual ) 
       apply_filters('woocommerce_delivery_disabled_dates', $disableDates);
     
     
     return $disableDates;

$disableDates 变量是你命名为$fields 的钩子回调的输入参数(我认为)

附言。这只是基于您发布的代码的猜测。我有很多不清楚的地方,但是您原始代码中的$disableDates 显然应该有一个值。

【讨论】:

以上是关于当 WooCommerce 购物车包含虚拟产品时,如何隐藏结帐日期选择器?的主要内容,如果未能解决你的问题,请参考以下文章

php 活动门票加 - 当WooCommerce Ticket添加到购物车时,将其他WooCommerce产品添加到购物车

当鼠标移动到woocommerce中的购物车图标时,如何创建幻灯片以显示产品?

在WooCommerce中产品缺货时更改单个添加到购物车文本

Woocommerce 购物车休息 API

在 Woocommerce 购物车中自动添加或删除免费产品

在 WooCommerce 中将购物车商品限制为来自同一产品类别