Условие, которое проверяет, есть ли у текущей категории подкатегории с постами.

Вопрос или проблема

Я ищу способ создать условное правило, которое проверяет, в шаблоне архива категорий, есть ли у текущей категории подкатегории с постами.

Более конкретно, посты являются “продуктами” в настройке 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 на вашем сайте.

Оцените материал
Добавить комментарий

Капча загружается...