Как выбрать определенные категории?
Есть вывод категорий
<div class="list"> <div class="container"> <div class="list-wrap"> <div class="list-wrap__title ttl"><?php the_field('title3') ?></div> <?php if ($categories) : foreach ($categories as $item) : ?> <div class="list-wrap__item"> <div class="list-wrap__item--image"> <img src="<?php echo check_image(get_field('img', 'term_' . $item->term_id)) ?>" alt="img"> </div> <div class="list-wrap__item--content"> <div class="list-wrap__item--content-title"><?php echo $item->name ?></div> <div class="list-wrap__item--content-text"><?php the_field('description', 'term_' . $item->term_id) ?></div> <a href="<?php echo get_category_link($item->term_id) ?>" class="btn btn-blue"><?php the_field('btn_text3') ?></a> </div> </div> <?php endforeach; endif; ?> </div> </div> </div> |
<div class="list"> <div class="container"> <div class="list-wrap"> <div class="list-wrap__title ttl"><?php the_field('title3') ?></div> <?php if ($categories) : foreach ($categories as $item) : ?> <div class="list-wrap__item"> <div class="list-wrap__item--image"> <img src="<?php echo check_image(get_field('img', 'term_' . $item->term_id)) ?>" alt="img"> </div> <div class="list-wrap__item--content"> <div class="list-wrap__item--content-title"><?php echo $item->name ?></div> <div class="list-wrap__item--content-text"><?php the_field('description', 'term_' . $item->term_id) ?></div> <a href="<?php echo get_category_link($item->term_id) ?>" class="btn btn-blue"><?php the_field('btn_text3') ?></a> </div> </div> <?php endforeach; endif; ?> </div> </div> </div>
Как тут можно либо исключить определенные либо включить только нужные категории??
Дополнительно:
Смотрите что в массиве $categories и какой запрос в базу для его получения
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Исключать или оставлять нужные категории лучше не внутри верстки, а на этапе получения массива
$categories. Тогда в шаблон попадут только те термины, которые реально нужно вывести.Если категории получаются через
get_categories(), используйте параметрыincludeилиexclude:$categories = get_categories([ 'taxonomy' => 'category', 'hide_empty' => false, 'include' => [3, 8, 15], 'orderby' => 'include', ]);
Чтобы наоборот убрать несколько категорий:
$categories = get_categories([ 'taxonomy' => 'category', 'hide_empty' => false, 'exclude' => [5, 7, 11], ]);
Если массив уже готов и менять запрос неудобно, можно отфильтровать его перед циклом:
$allowed_ids = [3, 8, 15]; $categories = array_filter($categories, function ($term) use ($allowed_ids) { return in_array((int) $term->term_id, $allowed_ids, true); });
В самом выводе также желательно экранировать данные:
esc_html($item->name),esc_url(get_category_link($item->term_id)),esc_attr()для атрибутов. Но главный ответ: сначала посмотрите, откуда приходит$categories, и задайтеinclude/excludeтам.Если список категорий должен быть не весь, а только выбранный набор, фильтровать нужно до вывода карточек. Иначе вы будете сначала получать лишние термины, а потом пытаться скрывать их в вёрстке. Это хуже и по читаемости, и по производительности.
Если категории получаете через
get_categories(), задайтеinclude:$categories = get_categories([ 'taxonomy' => 'category', 'hide_empty' => false, 'include' => [12, 18, 25], 'orderby' => 'include', ]);
Если надо исключить несколько категорий, используйте
exclude:$categories = get_categories([ 'taxonomy' => 'category', 'hide_empty' => false, 'exclude' => [3, 7], ]);
В вашем шаблоне дополнительно проверьте вывод ACF-полей термина. Для стандартных рубрик ACF обычно принимает формат
'category_' . $item->term_id, а не'term_' . $item->term_id. Универсально можно так:$acf_id = $item->taxonomy . '_' . $item->term_id; $image = get_field('img', $acf_id);
И обязательно экранируйте вывод: название через
esc_html(), URL черезesc_url(), alt черезesc_attr(). Тогда список категорий будет управляемым и безопасным.