如果在 Woocommerce 中应用了任何优惠券代码,请删除一些支付网关
Remove some payment gateways if any coupon code is applied in Woocommerce
我开始从事小型 Woocommerce 项目。我有 3 个进入这家商店的支付网关:Paypal、信用卡和直接银行转账。
我想要的是:如果使用优惠券代码,我想从可用的支付网关中禁用(或删除)Paypal 和信用卡,并只保留 "Direct bank Transfer" 作为可用的支付网关选项。
显示结帐页面的当前状态:
我找到了类似的解决方案,但这是根据产品类别删除网关。
add_filter( 'woocommerce_available_payment_gateways', 'unset_payment_gateways_by_category' );
function unset_payment_gateways_by_category( $available_gateways ) {
global $woocommerce;
$unset = false;
$category_ids = array( 8, 37 );
foreach ( $woocommerce->cart->cart_contents as $key => $values ) {
$terms = get_the_terms( $values['product_id'], 'product_cat' );
foreach ( $terms as $term ) {
if ( in_array( $term->term_id, $category_ids ) ) {
$unset = true;
break;
}
}
}
if ( $unset == true )
unset( $available_gateways['cheque'] );
return $available_gateways;
}
所以我认为这个功能可以使用,但根据我的问题稍微修改一下。
感谢任何帮助。
给你:
add_filter('woocommerce_available_payment_gateways', 'unset_gatway_by_applied_coupons');
function unset_gatway_by_applied_coupons($available_gateways)
{
$coupons = WC()->cart->applied_coupons;
if (!empty($coupons)) {
unset($available_gateways['bacs']);
}
return $available_gateways;
}
我们在这里所做的是检查是否通过 WC()->cart->applied_coupons;
应用了任何优惠券,这将 return 优惠券数组,如果优惠券数组不为空,则删除特定的支付网关
如果您想检查是否应用了某些优惠券并根据您的情况删除网关,您可以使用以下内容:
add_filter('woocommerce_available_payment_gateways', 'unset_gatway_by_applied_coupons');
function unset_gatway_by_applied_coupons($available_gateways)
{
$coupons = WC()->cart->applied_coupons;
foreach ($coupons as $coupon) {
if ($coupon == 'my_coupon') { //here you can specific your coupon name
unset($available_gateways['bacs']);
}
}
return $available_gateways;
}
当然这两个功能都经过测试,你只需要将它们放在你的 functions.php
以下代码将删除所有支付网关 除了 "Direct bank Transfer" (bacs) 仅当至少有一个优惠券代码时已被客户申请:
add_filter('woocommerce_available_payment_gateways', 'applied_coupons_hide_payment_gateways', 20, 1 );
function applied_coupons_hide_payment_gateways( $available_gateways){
// Not in backend (admin)
if( is_admin() )
return $available_gateways;
// If at least a coupon is applied
if( sizeof( WC()->cart->get_applied_coupons() ) > 0 ){
// Loop through payment gateways
foreach ( $available_gateways as $gateway_id => $gateway ) {
// Remove all payment gateways except BACS (Bank Wire)
if( $gateway_id != 'bacs' )
unset($available_gateways[$gateway_id]);
}
}
return $available_gateways;
}
代码进入活动子主题(或活动主题)的 function.php 文件。已测试并有效。
我开始从事小型 Woocommerce 项目。我有 3 个进入这家商店的支付网关:Paypal、信用卡和直接银行转账。
我想要的是:如果使用优惠券代码,我想从可用的支付网关中禁用(或删除)Paypal 和信用卡,并只保留 "Direct bank Transfer" 作为可用的支付网关选项。
显示结帐页面的当前状态:
我找到了类似的解决方案,但这是根据产品类别删除网关。
add_filter( 'woocommerce_available_payment_gateways', 'unset_payment_gateways_by_category' );
function unset_payment_gateways_by_category( $available_gateways ) {
global $woocommerce;
$unset = false;
$category_ids = array( 8, 37 );
foreach ( $woocommerce->cart->cart_contents as $key => $values ) {
$terms = get_the_terms( $values['product_id'], 'product_cat' );
foreach ( $terms as $term ) {
if ( in_array( $term->term_id, $category_ids ) ) {
$unset = true;
break;
}
}
}
if ( $unset == true )
unset( $available_gateways['cheque'] );
return $available_gateways;
}
所以我认为这个功能可以使用,但根据我的问题稍微修改一下。
感谢任何帮助。
给你:
add_filter('woocommerce_available_payment_gateways', 'unset_gatway_by_applied_coupons');
function unset_gatway_by_applied_coupons($available_gateways)
{
$coupons = WC()->cart->applied_coupons;
if (!empty($coupons)) {
unset($available_gateways['bacs']);
}
return $available_gateways;
}
我们在这里所做的是检查是否通过 WC()->cart->applied_coupons;
应用了任何优惠券,这将 return 优惠券数组,如果优惠券数组不为空,则删除特定的支付网关
如果您想检查是否应用了某些优惠券并根据您的情况删除网关,您可以使用以下内容:
add_filter('woocommerce_available_payment_gateways', 'unset_gatway_by_applied_coupons');
function unset_gatway_by_applied_coupons($available_gateways)
{
$coupons = WC()->cart->applied_coupons;
foreach ($coupons as $coupon) {
if ($coupon == 'my_coupon') { //here you can specific your coupon name
unset($available_gateways['bacs']);
}
}
return $available_gateways;
}
当然这两个功能都经过测试,你只需要将它们放在你的 functions.php
以下代码将删除所有支付网关 除了 "Direct bank Transfer" (bacs) 仅当至少有一个优惠券代码时已被客户申请:
add_filter('woocommerce_available_payment_gateways', 'applied_coupons_hide_payment_gateways', 20, 1 );
function applied_coupons_hide_payment_gateways( $available_gateways){
// Not in backend (admin)
if( is_admin() )
return $available_gateways;
// If at least a coupon is applied
if( sizeof( WC()->cart->get_applied_coupons() ) > 0 ){
// Loop through payment gateways
foreach ( $available_gateways as $gateway_id => $gateway ) {
// Remove all payment gateways except BACS (Bank Wire)
if( $gateway_id != 'bacs' )
unset($available_gateways[$gateway_id]);
}
}
return $available_gateways;
}
代码进入活动子主题(或活动主题)的 function.php 文件。已测试并有效。