К сожалению, по состоянию на WooCommerce 3.6.2
, они убрали возможность проверять корзину в любых внутренних вызовах, в соответствии с тикетом, который я открыл . Я запускал аналогичный фильтр на woocommerce_countries
, чтобы ограничить определенные товары в корзине, чтобы его можно было покупать только в определенных местах, и получил ошибку, связанную с фатальной ошибкой, после того, как я обновил несколько дней назад.
WC сказал, что они не решат проблему, так как она предназначена для ускорения процесса. Однако вы можете получить доступ к корзине в этом фильтре, выполнив следующие действия:
function vnm_disable_country_for_products($countries) {
// get_cart() will fail here in WC > 3.6.2, but we can still access a basic cart via the session:
$cartArray = WC()->session->cart;
if (is_array($cartArray) && !empty($cartArray)) {
$noSaleCountry = 'CA';
$limitingProducts = array(12616, 15631);
foreach ($cartArray as $itemArray) {
if (in_array($itemArray['product_id'], $limitingProducts)) {
unset($countries[$noSaleCountry]);
}
}
return $countries;
}
add_filter('woocommerce_countries', 'vnm_disable_country_for_products', 10, 1);
Это якобы совпадает с ответ Лоика ; однако, поскольку WC()->cart->get_cart()
больше не доступен, мы получаем доступ к корзине через WC()->session->cart
.