【问题标题】:How to hide checkout date picker when WooCommerce cart contains a virtual product?当 WooCommerce 购物车包含虚拟产品时,如何隐藏结帐日期选择器?
【发布时间】: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

标签: php wordpress woocommerce product cart


【解决方案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 显然应该有一个值。

    【讨论】:

      猜你喜欢
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 2018-06-17
      • 1970-01-01
      相关资源
      最近更新 更多