微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

仅在结帐时针对特定的运输方式禁用付款网关

如何解决仅在结帐时针对特定的运输方式禁用付款网关

我在WooCommerce中遇到了一个问题,我想知道是否还有其他人也遇到过这个问题。

我出售的某些产品太脆弱,无法由UPS / dhl / FedEx运送。因此,我必须通过货盘运输这些产品。为了解决我的问题,我创建了“请求报价”运输方式,该方式允许我的客户选择BACS作为付款方式,请求报价作为运输方式并提交他们的订单。在计算完运输费用之后,我将更新订单(将运输方法更改为“不适用”),并将状态从“保留”更改为“待付款”,以便客户在需要时可以使用卡付款

这是我遇到的问题。我注意到,如果我取消设置几个付款网关,并且选择了这些特定的送货方式,即使我删除了“付款方式”端点(网站/我的帐户/订单/),客户也无法使用这些付款网关。订单的送货方式。

有没有解决的办法?

这是我用于禁用特定运输方式的付款网关的代码

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;
}

更新,在咨询了一些开发人员之后,他们建议该代码在每次需要付款网关时都运行,并建议我仅在Checkout页面上运行此代码段。

他们建议在我的代码添加以下内容

if ( is_checkout_pay_page() ) {
    // unset Payment Gateways
}

解决,这是我的尝试,并且有效。但是不确定是否可以表达得更好:

add_filter( 'woocommerce_available_payment_gateways',1 );

function filter_woocommerce_available_payment_gateways( $available_gateways ) { 

    if ( ! ( is_checkout_pay_page() ) ) {

    $gateways_to_disable = array( 'cardgatecreditcard',$gateways_to_disable ) ) {
                unset( $available_gateways[$id] );
            }
        }
    }
    return $available_gateways;
}
else { return $available_gateways;
    }
}

解决方法

add_filter( 'woocommerce_available_payment_gateways','filter_woocommerce_available_payment_gateways',10,1 );

function filter_woocommerce_available_payment_gateways( $available_gateways ) { 

    if ( ! ( is_checkout_pay_page() ) ) {

    $gateways_to_disable = array( 'paymentgateway1','paymentgateway2','paymentgateway3' );
    $shipping_methods = array( 'shippingmethod1','shippingmethod2','shippingmethod3' );
    $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;
}
else { return $available_gateways;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?