Last active
May 15, 2025 11:58
-
-
Save Kodzhesyan/e79fad20cd92e6fdebf76995cf5de81c to your computer and use it in GitHub Desktop.
custom_restrict_gateways_by_product
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<? | |
add_filter( 'woocommerce_available_payment_gateways', 'custom_restrict_gateways_by_product', 10, 1 ); | |
function custom_restrict_gateways_by_product( $available_gateways ) { | |
if ( is_admin() || WC()->cart->is_empty() ) { | |
return $available_gateways; | |
} | |
// Тут вказуєте ідентифікатори саме тих продуктів І/АБО варіацій | |
$product_gateway_map = array( | |
// для батьківського simple-товару ID=123 | |
123 => array( 'bacs', 'cod' ), | |
// для конкретної варіації ID=789 | |
789 => array( 'paypal', 'stripe' ), | |
); | |
$allowed = null; | |
foreach ( WC()->cart->get_cart() as $cart_item ) { | |
// беремо ID — спочатку перевіряємо варіацію, потім батька | |
$pid = $cart_item['variation_id'] ? $cart_item['variation_id'] : $cart_item['product_id']; | |
if ( isset( $product_gateway_map[ $pid ] ) ) { | |
// якщо хочете враховувати правила для ВСІХ товарів, | |
// то тут потрібно збирати перетин масивів, а не break; | |
$allowed = $product_gateway_map[ $pid ]; | |
break; | |
} | |
} | |
if ( is_array( $allowed ) ) { | |
foreach ( $available_gateways as $gateway_id => $gateway ) { | |
if ( ! in_array( $gateway_id, $allowed, true ) ) { | |
unset( $available_gateways[ $gateway_id ] ); | |
} | |
} | |
} | |
return $available_gateways; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Якщо вам потрібно показувати в WooCommerce різні способи оплати для окремих товарів — цей PHP‐сніпет саме для вас! 🛒💳
🔹 Що робить?
Для вказаних ID товарів залишає тільки ті методи оплати, які ви перерахували (наприклад, “Накладений платіж” або “Банківський переказ” для одного продукту, а “PayPal” і “Stripe” — для іншого).
🔹 Як використовувати?
Відкрийте functions.php вашої теми (або власного плагіна).
Скопіюйте та вставте сніпет.
У масиві $product_gateway_map вкажіть ID товарів та коди потрібних платіжних шлюзів.
🔹 Навіщо?
Контроль методів оплати під специфічні товари
Уникнення непотрібних опцій для клієнтів
Просте та гнучке рішення без зайвих плагінів 🛠️