在 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 中的运输类别自定义计算的运输成本