在 WooCommerce 中禁用基于自定义运输方式的付款方式

Posted

技术标签:

【中文标题】在 WooCommerce 中禁用基于自定义运输方式的付款方式【英文标题】:Disabling payment methods based on custom shipping methods in WooCommerce 【发布时间】:2021-06-07 08:11:15 【问题描述】:

在 WooCommerce 商店中,我有 2 种基于包裹储物柜的送货方式。第一个是预付款,第二个是货到付款。

这个想法是:

easypack_parcel_machines -> 仅预付款 easypack_parcel_machines_cod -> 仅限货到付款

我的代码如下。在两种情况下都申请后,我只有预付款。怎么了?

add_filter( 'woocommerce_available_payment_gateways', 'gateway_disable_shipping_meth' );
  
function gateway_disable_shipping_meth( $available_gateways ) 
   if ( ! is_admin() ) 
      $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );      
      $chosen_shipping = $chosen_methods[0];
      
       if ( isset( $available_gateways['bacs'] ) && 0 === strpos( $chosen_shipping, 'easypack_parcel_machines' ) ) 
         unset( $available_gateways['cod'] );
      
      elseif ( isset( $available_gateways['cod'] ) && 0 === strpos( $chosen_shipping, 'easypack_parcel_machines_cod' ) ) 
         unset( $available_gateways['bacs'] );
      
     
   return $available_gateways;

【问题讨论】:

【参考方案1】:

由于两种运输方式都以相同的 slug 开头,因此您只需在 if / elseif 语句中将它们反转,如下所示(还有一些其他错误)

add_filter( 'woocommerce_available_payment_gateways', 'gateway_disable_shipping_meth' );
  
function gateway_disable_shipping_meth( $available_gateways ) 
    if ( ! is_admin() ) 
        $chosen_shipping = WC()->session->get( 'chosen_shipping_methods' )[0];
      
        if ( isset( $available_gateways['bacs'] ) && 0 === strpos( $chosen_shipping, 'easypack_parcel_machines_cod' ) ) 
            unset( $available_gateways['bacs'] );
        
        elseif ( isset( $available_gateways['cod'] ) && 0 === strpos( $chosen_shipping, 'easypack_parcel_machines' ) ) 
            unset( $available_gateways['cod'] );
        
      
    return $available_gateways;

或者也可以这样:

add_filter( 'woocommerce_available_payment_gateways', 'gateway_disable_shipping_meth' );
  
function gateway_disable_shipping_meth( $available_gateways ) 
    if ( ! is_admin() ) 
        $chosen_shipping = WC()->session->get( 'chosen_shipping_methods' )[0];
        
        if ( 0 === strpos( $chosen_shipping, 'easypack_parcel_machines' ) ) 
            if ( false !== strpos( $chosen_shipping, 'cod' ) && isset( $available_gateways['bacs'] ) ) 
                unset( $available_gateways['bacs'] );
             elseif ( isset( $available_gateways['cod'] ) ) 
                unset( $available_gateways['cod'] );
            
        
      
    return $available_gateways;

它应该可以工作。

【讨论】:

我感觉类似的蛞蝓也会引起问题。您的代码效果很好。感谢您的帮助。

以上是关于在 WooCommerce 中禁用基于自定义运输方式的付款方式的主要内容,如果未能解决你的问题,请参考以下文章

根据 WooCommerce 中的运输类别自定义计算的运输成本

Woocommerce 3中的自定义结帐字段和运输方式ajax交互

向 Woocommerce 运输方式添加不同的自定义标签

在帐单/运输表单中自定义占位符

根据 Woocommerce 中选择的付款方式禁用运输方式

禁用在Woocommerce中编辑特定的管理员自定义字段