仅针对可下载项目和特定送货国家/地区取消设置付款方式
Unset Payment Method for downloadable items only and a specific shipping country
我的电子商务网站 99% 卖给南非人,我们使用 "BACS" "EFT" 和信用卡作为付款方式。
我们接受国际订单,但无法自动计算国际订单的运费。
因此,当订单是国际订单(不是南非)时,我们希望用户 select BACS / EFT 付款选项。
我们要求他们挂十付款,以便我们先确认运费。
但如果国际订单仅包含可下载产品(因此不需要运送),那么我们希望提供信用卡付款选项。
我正在尝试在结帐页面上取消设置名为 'mygate' 的付款方式,如果这两个都为真:
- 购物车仅包含可下载的产品。
- 送货地址不是南非(ZA)
我快到了,但需要一些帮助。
要为南非以外的所有国家/地区禁用支付网关:
function payment_gateway_disable_country( $available_gateways ) {
global $woocommerce;
if ( isset( $available_gateways['mygate'] ) && $woocommerce->customer->get_country() <> 'ZA' ) {
unset( $available_gateways['mygate'] );
}
return $available_gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country' );
并检查产品是否可下载;与以下内容有关:
if( ! $product->is_downloadable() )
这可以通过 foreach 循环来完成,我们将在其中检查是否所有产品都可下载。在这种情况下,也需要用 get_shipping_country()
方法替换过时的 get_country()
。
这是您重新访问的代码:
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country', 20, 1 );
function payment_gateway_disable_country( $available_gateways ) {
// Not in backend (admin)
if( is_admin() )
return $available_gateways;
$only_downloadable_products = true;
// Loop through cart items looking for non downloadable products
foreach( WC()->cart->get_cart() as $cart_item ){
if( ! $cart_item['data']->is_downloadable() ){
$only_downloadable_products = false; // Non downloadable found
break; // Stop the loop
}
}
if( isset( $available_gateways['mygate'] )
&& WC()->customer->get_shipping_country() != 'ZA' // <= Changed
&& $only_downloadable_products ) { // <= Added
unset( $available_gateways['mygate'] );
}
return $available_gateways;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。
经过测试并且应该可以为您使用正确的支付网关 ID 替换 'mygate'
。
我的电子商务网站 99% 卖给南非人,我们使用 "BACS" "EFT" 和信用卡作为付款方式。
我们接受国际订单,但无法自动计算国际订单的运费。
因此,当订单是国际订单(不是南非)时,我们希望用户 select BACS / EFT 付款选项。 我们要求他们挂十付款,以便我们先确认运费。
但如果国际订单仅包含可下载产品(因此不需要运送),那么我们希望提供信用卡付款选项。
我正在尝试在结帐页面上取消设置名为 'mygate' 的付款方式,如果这两个都为真:
- 购物车仅包含可下载的产品。
- 送货地址不是南非(ZA)
我快到了,但需要一些帮助。
要为南非以外的所有国家/地区禁用支付网关:
function payment_gateway_disable_country( $available_gateways ) {
global $woocommerce;
if ( isset( $available_gateways['mygate'] ) && $woocommerce->customer->get_country() <> 'ZA' ) {
unset( $available_gateways['mygate'] );
}
return $available_gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country' );
并检查产品是否可下载;与以下内容有关:
if( ! $product->is_downloadable() )
这可以通过 foreach 循环来完成,我们将在其中检查是否所有产品都可下载。在这种情况下,也需要用 get_shipping_country()
方法替换过时的 get_country()
。
这是您重新访问的代码:
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country', 20, 1 );
function payment_gateway_disable_country( $available_gateways ) {
// Not in backend (admin)
if( is_admin() )
return $available_gateways;
$only_downloadable_products = true;
// Loop through cart items looking for non downloadable products
foreach( WC()->cart->get_cart() as $cart_item ){
if( ! $cart_item['data']->is_downloadable() ){
$only_downloadable_products = false; // Non downloadable found
break; // Stop the loop
}
}
if( isset( $available_gateways['mygate'] )
&& WC()->customer->get_shipping_country() != 'ZA' // <= Changed
&& $only_downloadable_products ) { // <= Added
unset( $available_gateways['mygate'] );
}
return $available_gateways;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。
经过测试并且应该可以为您使用正确的支付网关 ID 替换 'mygate'
。