Код, который у меня есть, работает для сокрытия платежного шлюза BACS для гостей и клиентов, но мне нужно изменить его так, чтобы шлюз BACS стал доступным только в том случае, если клиент/администратор применяет определенный код купона под названием FOOD в КОРЗИНЕ или CHECKOUT.
Другими словами: скройте шлюз BACS до тех пор, пока КУПОН под названием FOOD не будет применен к КОРЗИНЕ или КАССЕТЕ.
Вот код, который у меня есть:
add_filter('woocommerce_available_payment_gateways', 'show_bacs_if_coupon_is_used', 99, 1);
function show_bacs_if_coupon_is_used( $available_gateways ) {
$current_user = wp_get_current_user();
if ( isset($available_gateways['bacs']) && (current_user_can('customer'))) {
unset($available_gateways['bacs']);
} else if ( isset($available_gateways['bacs']) && !is_user_logged_in()) {
unset($available_gateways['bacs']);
}
return $available_gateways;
}
🤔 А знаете ли вы, что...
PHP поддерживает множество библиотек для работы с RESTful API.
Показывать способ оплаты BACS только при применении определенного купона к корзине только для зарегистрированных пользователей (методом WC_Cart
get_applied_coupons()
):
add_filter('woocommerce_available_payment_gateways', 'show_bacs_for_specific_applied_coupon', 99, 1);
function show_bacs_for_specific_applied_coupon( $available_gateways ) {
if ( is_admin() ) return $available_gateways; // Only on frontend
$coupon_code = 'FOOD'; // <== Set here the coupon code
if ( isset($available_gateways['bacs']) && ! ( is_user_logged_in() &&
in_array( strtolower($coupon_code), WC()->cart->get_applied_coupons() ) ) ) {
unset($available_gateways['bacs']);
}
return $available_gateways;
}
Код находится в файле functions.php вашей активной дочерней темы (или активной темы). Проверено и работает.