woocommerce: Как отключить способ оплаты для определенных товаров по id?

Как отключить способ оплаты для определенных товаров по 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; // возвращаем результат

}
Заметки к вопросу:
Dan Zakirov 1.3 года назад

Какой интересный вопрос. По сути надо проверить каждый товар в корзине, ориентировочно вот так используя тот же фильтр woocommerce_available_payment_gateways()

add_filter( 'woocommerce_available_payment_gateways', 'air_disable_payment_gateway_by_category_id' );

function air_disable_payment_gateway_by_category_id( $available_gateways ) {
	global $woocommerce;

	$cart = $woocommerce->cart;

	$category_ids_to_disable = array( 45, 47 ); // ID категорий

	foreach ($cart->get_cart_contents() as $cart_item ) {
		$product_id = $cart_item['product_id'];
		$product_categories = wp_get_post_terms( $product_id, 'product_cat', array( 'fields' => 'ids' ) );
		if ( ! empty( array_intersect( $category_ids_to_disable, $product_categories ) ) ) {
			unset( $available_gateways['wc_tinkoff_kvk'] ); // тут отрубаем нужный метод оплаты
			break;
		}
	}

	return $available_gateways;
}