是的,可以为多个产品类别的组禁用支付网关。
1) 在下面的分离函数中,我们定义了我们的产品类别和支付网关组。产品类别可以是term(s) id(s)、slug(s) 或name(s)。因此,在此函数中,我们定义了要使用的设置:
// The settings in a function
function defined_categories_remove_payment_gateways() {
// Below, Define by groups the categories that will removed specific defined payment gateways
// The categories can be terms Ids, slugs or names
return array(
'group_1' => array(
'categories' => array( 11, 12, 16 ), // product category terms
'payment_ids' => array( 'cod' ), // <== payment(s) gateway(s) to be removed
),
'group_2' => array(
'categories' => array( 13, 17, 15 ), // product category terms
'payment_ids' => array( 'bacs', 'cheque' ), // <== payment(s) gateway(s) to be removed
),
'group_3' => array(
'categories' => array( 14, 19, 47 ), // product category terms
'payment_ids' => array( 'paypal' ), // <== payment(s) gateway(s) to be removed
),
);
}
2)现在挂钩功能将在结帐页面中删除基于购物车项目产品类别的支付网关,加载我们的设置功能:
add_filter( 'woocommerce_available_payment_gateways', 'remove_gateway_based_on_category' );
function remove_gateway_based_on_category( $available_gateways ){
// Only on checkout page
if ( is_checkout() && ! is_wc_endpoint_url() ) {
$settings_data = defined_categories_remove_payment_gateways(); // Load settings
$unset_gateways = []; // Initializing
// 1. Loop through cart items
foreach ( WC()->cart->get_cart() as $cart_item ) {
// 2. Loop through category settings
foreach ( $settings_data as $group_values ) {
// // Checking the item product category
if ( has_term( $group_values['categories'], 'product_cat', $cart_item['product_id'] ) ) {
// Add the payment gateways Ids to be removed to the array
$unset_gateways = array_merge( $unset_gateways, $group_values['payment_ids'] );
break; // Stop the loop
}
}
}
// Check that array of payment Ids is not empty
if ( count($unset_gateways) > 0 ) {
// 3. Loop through payment gateways to be removed
foreach ( array_unique($unset_gateways) as $payment_id ) {
if( isset($available_gateways[$payment_id]) ) {
// Remove the payment gateway
unset($available_gateways[$payment_id]);
}
}
}
}
return $available_gateways;
}
代码在您的活动子主题(或活动主题)的functions.php 文件中。测试和工作。