【问题标题】:How to Disable Multiple Payment Gateways For Specific Shipping Method [duplicate]如何为特定运输方式禁用多个支付网关 [重复]
【发布时间】:2020-06-25 11:54:20
【问题描述】:

我在 WooCommerce 上创建了此代码,以针对两种不同的运输方式(request_shipping_quote 和 flat_rate)禁用多个支付网关(cardgatecreditcard、cardgategiropay、cardgateideal 和 cardgatesofortbanking)。但是如何简化呢?

// Disable Payment Gateway For Specific Shipping Method

add_filter( 'woocommerce_available_payment_gateways', 'bbloomer_gateway_disable_shipping_326' );
  
function bbloomer_gateway_disable_shipping_326( $available_gateways ) {
     
   if ( ! is_admin() ) {
        
      $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
        
      $chosen_shipping = $chosen_methods[0];
        
      if ( isset( $available_gateways['cardgatecreditcard'] ) && 0 === strpos( $chosen_shipping, 'flat_rate' ) ) {
         unset( $available_gateways['cardgatecreditcard'] );
      }
     if ( isset( $available_gateways['cardgategiropay'] ) && 0 === strpos( $chosen_shipping, 'flat_rate' ) ) {
         unset( $available_gateways['cardgategiropay'] );
      }
     if ( isset( $available_gateways['cardgateideal'] ) && 0 === strpos( $chosen_shipping, 'flat_rate' ) ) {
         unset( $available_gateways['cardgateideal'] );
      }
     if ( isset( $available_gateways['cardgatesofortbanking'] ) && 0 === strpos( $chosen_shipping, 'flat_rate' ) ) {
         unset( $available_gateways['cardgatesofortbanking'] );
      }
     if ( isset( $available_gateways['cardgatecreditcard'] ) && 0 === strpos( $chosen_shipping, 'request_shipping_quote' ) ) {
         unset( $available_gateways['cardgatecreditcard'] );
      }
     if ( isset( $available_gateways['cardgategiropay'] ) && 0 === strpos( $chosen_shipping, 'request_shipping_quote' ) ) {
         unset( $available_gateways['cardgategiropay'] );
      }
     if ( isset( $available_gateways['cardgateideal'] ) && 0 === strpos( $chosen_shipping, 'request_shipping_quote' ) ) {
         unset( $available_gateways['cardgateideal'] );
      }
     if ( isset( $available_gateways['cardgatesofortbanking'] ) && 0 === strpos( $chosen_shipping, 'request_shipping_quote' ) ) {
         unset( $available_gateways['cardgatesofortbanking'] );
      }
   }
     
   return $available_gateways;
     
}

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    尝试以下方法:

    add_filter( 'woocommerce_available_payment_gateways', 'filter_woocommerce_available_payment_gateways', 10, 1 );
    function filter_woocommerce_available_payment_gateways( $available_gateways ) { 
    
        $gateways_to_disable = array( 'cardgatecreditcard', 'cardgategiropay', 'cardgateideal', 'cardgatesofortbanking' );
        $shipping_methods = array( 'flat_rate', 'request_shipping_quote' );
        $disable_gateways = false;
    
        // Check if we need to disable gateways
        foreach ( $shipping_methods as $shipping_method ) {
            if ( strpos( WC()->session->get( 'chosen_shipping_methods' )[0], $shipping_method ) !== false ) $disable_gateways = true;
        }
        
        // If so, disable the gateways
        if ( $disable_gateways ) {
            foreach ( $available_gateways as $id => $gateway ) {
                if ( in_array( $id, $gateways_to_disable ) ) {
                    unset( $available_gateways[$id] );
                }
            }
        }
        return $available_gateways;
    }
    

    【讨论】:

    • 我试试看。原始代码会减慢网站速度吗?还是使用您的版本简化它是最佳做法?
    • 您的原始代码本身不会减慢您的网站速度,但编写重复代码(如 if 语句列表)是一种不好的做法。 (还做了一个小修改。我的代码中缺少“cardgateideal”支付网关。)
    • 非常感谢。这个周末我会试一试。再次感谢您简单地帮助我使用此代码 sn-p。
    • 没问题。如果这对您有用,请将答案标记为正确/已解决。
    • 非常感谢。奇迹般有效。非常感谢您在简化代码方面的帮助...
    猜你喜欢
    • 2021-01-30
    • 2021-06-07
    • 2011-04-02
    • 2020-09-27
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    相关资源
    最近更新 更多