如何解决仅在结帐时针对特定的运输方式禁用付款网关
我在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 举报,一经查实,本站将立刻删除。