Вопрос или проблема
Я ищу способ создать условное правило, которое проверяет, в шаблоне архива категорий, есть ли у текущей категории подкатегории с постами.
Более конкретно, посты являются “продуктами” в настройке Woocommerce.
До сих пор мне удалось проверить, есть ли у текущей категории подкатегории с помощью кода ниже. Но даже после некоторых поисков я не смог продвинуться дальше.
$term = get_queried_object();
$children = get_terms( $term->taxonomy, array(
'parent' => $term->term_id,
'hide_empty' => false
) );
if($children) {
echo 'something';
}
Пожалуйста, установите hide_empty в true, чтобы получить только те категории, которые назначены посту.
$term = get_queried_object();
$children = get_terms( 'category', array(
'parent' => $term->term_id,
'hide_empty' => true
) );
.
Ответ или решение
Для решения задачи, связанной с условным определением наличия подкатегорий с продуктами в шаблоне архивов категорий на WooCommerce, следует предпринять комплексный подход. Вы уже начали с правильного направления, определив текущую категорию и извлекая ее подкатегории с помощью функции get_terms
. Тем не менее, чтобы удостовериться, что эти подкатегории действительно содержат продукты, необходимо дополнительно провести проверку на наличие постов в каждой из подкатегорий.
Ваш текущий код выглядит следующим образом:
$term = get_queried_object();
$children = get_terms( $term->taxonomy, array(
'parent' => $term->term_id,
'hide_empty' => false
) );
if($children) {
echo 'something';
}
Для более точного решения задачи, добавим проверку на наличие продуктов в каждой полученной подкатегории. Для этого необходимо использовать цикл для итерации по каждому элементу в массиве подкатегорий и проверять наличие продуктов, связанных с соответствующим термином.
$term = get_queried_object();
$children = get_terms('product_cat', array(
'parent' => $term->term_id,
'hide_empty' => false
));
$has_products = false;
foreach($children as $child) {
$products = new WP_Query(array(
'post_type' => 'product',
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => $child->term_id,
'include_children' => false,
),
),
'posts_per_page' => 1, // Мы проверяем наличие хотя бы одного продукта
));
if($products->have_posts()) {
$has_products = true;
break;
}
}
if($has_products) {
echo 'У подкатегории имеются продукты';
} else {
echo 'У подкатегории нет продуктов';
}
В этом коде используется объект WP_Query
для извлечения продуктов, связанных с каждой подкатегорией. Параметр 'posts_per_page' => 1
позволяет экономить ресурсы, проверяя только наличие одного продукта в любой подкатегории. Если хотя бы в одной из подкатегорий найдены продукты, устанавливаем $has_products
равным true
и прерываем цикл. В конце выводим соответствующее сообщение в зависимости от результата проверки.
Таким образом, данное решение позволяет эффективно осуществлять проверку на наличие продуктов в подкатегориях товара на платформе WooCommerce. Этот подход обеспечивает надежность и точность в представлении информации пользователю, что соответствует высоким профессиональным стандартам и может способствовать улучшению UX на вашем сайте.