【问题标题】:Disabling payment methods based on custom shipping methods in WooCommerce在 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;
}

【问题讨论】:

    标签: php wordpress woocommerce payment-gateway shipping-method


    【解决方案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;
    }
    

    它应该可以工作。

    【讨论】:

    • 我感觉类似的蛞蝓也会引起问题。您的代码效果很好。感谢您的帮助。
    猜你喜欢
    • 2013-06-09
    • 2018-10-28
    • 2022-06-10
    • 2013-05-03
    • 1970-01-01
    • 2018-11-09
    • 2021-06-13
    • 2021-04-12
    • 2017-12-06
    相关资源
    最近更新 更多