Найти в Дзене
Контент менеджер

Как вывести записи Wordpress из категорий и подкатегорий

Оглавление

Привет, друзья! Сегодня я хочу поделиться с вами своим опытом. На моем сайте была задача: отобразить записи из подкатегорий, используя многоуровневую структуру. Звучит просто, но, поверьте, есть свои нюансы! Давайте разберем, как я это сделал.

Структура категорий

Итак, у меня была такая структура:

- Каталог
- Подкаталог(1) (1 уровень)
- -Подкаталог(1) (2 уровень)
- - Подкаталог(2) (2 уровень)
- Подкаталог(2) (1 уровень)

Например в Каталоге мне нужно вывести все непустые подкатегории с их записями - название Подкаталога(1), а под ним — список из 6 записей.

Подход к решению задачи

Для начала мне нужно было получить текущую категорию. Вот как это делается:

$category = get_queried_object(); // Получаем текущую категорию
$category_id = $category->term_id; // Извлекаем ID категории

В этом коде я использую функцию `get_queried_object()`, чтобы получить информацию о текущей категории, и затем извлекаю ее ID. Этот ID мне понадобится для запроса подкатегорий.

Теперь, когда я знаю, с какой категорией работаю, я перехожу к следующему шагу — получению подкатегорий:

$li_args = array(
'parent' => $category_id,
'hide_empty' => 1,
);
$categories = get_categories($li_args); // Получаем массив категорий

Здесь я создаю массив `$li_args`, в котором указываю параметры для получения подкатегорий. Уровень вложенности (`hide_empty`) равен 1, чтобы получить только подкатегории в которых есть записи.

Нужно сделать проверку в какой категории мы находимся в родительской или подкатегории.

if (empty($categories)) {
if ($category->parent) {  // Если подкатегорий нет, проверяем, есть ли у текущей категории родитель
$parent_id = $category->parent; // Получаем родительскую категорию
$li_args['parent'] = $parent_id; // Получаем подкатегории родительской категории
$categories = get_categories($li_args);
}
}

Теперь, когда у меня есть массив подкатегорий, я могу пройтись по ним и вывести записи:

foreach($categories as $cat) {
echo '<h2>' . $cat->name . '</h2>';
$args = array(
'category__in' => array($cat->term_id),
'posts_per_page' => 6
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// Вывод информации о посте
the_title();
the_content();
}
}
wp_reset_postdata();
}

В этом блоке кода я перебираю каждую подкатегорию, вывожу ее название и формирую запрос для получения записей. Параметр `posts_per_page` установлен в `6`, чтобы получить 6 записей из подкатегории. Если нужно вывести все, то ставим -1

Теперь мне нужно проверить, есть ли записи, и если да, то вывести их:

if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post(); // Устанавливаем пост
// Вывод информации о посте
the_title('<h3>', '</h3>'); // Название поста
the_content(); // Содержимое поста
}
}
wp_reset_postdata(); // Сбрасываем данные запроса
}

В этом фрагменте я проверяю, есть ли записи в запросе. Если да, то выводим заголовок и содержимое каждой записи. Не забываем в конце сбросить данные запроса с помощью `wp_reset_postdata()`, чтобы избежать конфликтов с другими запросами на странице.

-2

Заключение

Вот и все! Таким образом, я смог вывести записи из подкатегорий на своем сайте. Этот процесс требует внимания к деталям, но, следуя шагам, можно добиться желаемого результата. Если у вас возникнут вопросы или вы захотите обсудить другие аспекты работы с WordPress, пишите в комментариях!

Полный код выложил в своем телеграм канале.