Skip to content

Instantly share code, notes, and snippets.

@Kodzhesyan
Last active May 15, 2025 11:58
Show Gist options
  • Save Kodzhesyan/e79fad20cd92e6fdebf76995cf5de81c to your computer and use it in GitHub Desktop.
Save Kodzhesyan/e79fad20cd92e6fdebf76995cf5de81c to your computer and use it in GitHub Desktop.
custom_restrict_gateways_by_product
<?
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;
}
@Kodzhesyan
Copy link
Author

Якщо вам потрібно показувати в WooCommerce різні способи оплати для окремих товарів — цей PHP‐сніпет саме для вас! 🛒💳

🔹 Що робить?
Для вказаних ID товарів залишає тільки ті методи оплати, які ви перерахували (наприклад, “Накладений платіж” або “Банківський переказ” для одного продукту, а “PayPal” і “Stripe” — для іншого).

🔹 Як використовувати?

Відкрийте functions.php вашої теми (або власного плагіна).

Скопіюйте та вставте сніпет.

У масиві $product_gateway_map вкажіть ID товарів та коди потрібних платіжних шлюзів.

🔹 Навіщо?

Контроль методів оплати під специфічні товари

Уникнення непотрібних опцій для клієнтів

Просте та гнучке рішення без зайвих плагінів 🛠️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment