Как в woocomerce включить способ оплаты только для определенных товаров по id?
Как в woocomerce включить способ оплаты только для определенных товаров по id? На просторах интернета нашел способ включения для определенных категорий, но нужно еще и для конкретных товаров
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_by_category', 25 );
function payment_gateway_by_category( $available_gateways ) {
// в админке лучше ничего не делать
if ( is_admin() ) {
return $available_gateways;
}
$gateway_slug = 'wc_tinkoff_kvk'; // ярлык метода оплаты
$is_available = true; // включен или выключен? по умолчанию – включен
$cat_ids = array( 45, 47 ); // ID категорий товаров, для которых отключаем
// цикл для содержимого корзины
foreach ( WC()->cart->get_cart_contents() as $key => $value ) {
// получаем все категории данного товара из корзины
if( $product_cats = get_the_terms( $value[ 'product_id' ], 'product_cat' ) ) {
foreach ( $product_cats as $product_cat ) {
if ( in_array( $product_cat->term_id, $cat_ids ) ) {
$is_available = false; // товар из заданной категории, отключаем метод оплаты
break 2;
}
}
}
}
// отключаем метод оплаты
if ( false === $is_available ){
unset( $available_gateways[ $gateway_slug ] );
}
return $available_gateways; // возвращаем результат
}
Ответы (1 шт):
Автор решения: KAGG Design
→ Ссылка
<?php
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_by_category', 25 );
function payment_gateway_by_category( $available_gateways ) {
// в админке лучше ничего не делать
if ( is_admin() ) {
return $available_gateways;
}
$gateway_slug = 'wc_tinkoff_kvk'; // ярлык метода оплаты
$is_available = true; // включен или выключен? по умолчанию – включен
$cat_ids = [ 45, 47 ]; // ID категорий товаров, для которых отключаем
$product_ids = [ 23, 55, 77 ]; // ID товаров, для которых отключаем
// цикл для содержимого корзины
foreach ( WC()->cart->get_cart_contents() as $value ) {
$product_id = (int) $value['product_id'];
if ( ! in_array( $product_id, $product_ids, true ) ) {
$is_available = false; // товар с заданным ID, отключаем метод оплаты
break;
}
// получаем все категории данного товара из корзины
$product_cats = get_the_terms( $product_id, 'product_cat' );
if ( ! $product_cats || is_wp_error( $product_cats ) ) {
continue;
}
foreach ( $product_cats as $product_cat ) {
if ( in_array( $product_cat->term_id, $cat_ids ) ) {
$is_available = false; // товар из заданной категории, отключаем метод оплаты
break 2;
}
}
}
// отключаем метод оплаты
if ( ! $is_available ) {
unset( $available_gateways[ $gateway_slug ] );
}
return $available_gateways; // возвращаем результат
}