Я пишу функцию, которая должна проверить, есть ли в корзине предмет, который имеет определенную категорию.Как получить категории товаров из корзины WooCommerce?
Моя идея была:
add_filter('woocommerce_package_rates', 'remove_flat_rate_from_used_products', 10, 2);
function remove_flat_rate_from_used_products($rates, $package) {
if(is_woocommerce() && (is_checkout() || is_cart())) {
if(check_whether_item_has_the_category()) {
unset($rates['flat_rate']);
}
}
return $rates;
}
Я догадывался, функция get_cart() возвращает содержимое корзины, и я смог бы получить информацию о категории товаров там. Мне нужно знать структуру get_cart массива() возвращает, так что я написал:
function check_whether_item_has_the_category() {
global $woocommerce;
var_dump(WC()->cart->get_cart());
}
И получил
Warning: Invalid argument supplied for foreach() in ...wp-content\plugins\woocommerce\includes\class-wc-shipping.php on line 295
Затем я попытался найти название категории в результатах get_cart() функции:
function check_whether_item_has_the_category() {
global $woocommerce;
if(in_array('used', WC()->cart->get_cart())) {
echo 'do something';
}
}
И получил ту же ошибку.
Использование $ WooCommerce вместо WC() ничего не дают, а также удалить из global $woocommerce
Что я делаю неправильно и как я могу получить элементы категории (или проверить их на существующие конкретного одного)?
что, если у вас есть более чем один продукт в корзину с различными категориями, если фиксированная ставка по-прежнему будет снята с охраны? – d79
Да, если есть хотя бы один продукт с категорией, то фиксированная ставка должна быть отменена. –