Как сделать вывод записей по тегу средствами WordPress
В WordPress для вывода списка записей с определённым тегом в файле tag.php (или в шаблоне архива тегов) не нужно напрямую обращаться к базе данных. Можно использовать встроенные функции и класс WP_Query или глобальный цикл WordPress.
1. Использовать стандартный архив тегов
По умолчанию WordPress автоматически обрабатывает URL вида:
https://site.com/tag/название_тега/
И подгружает шаблон tag.php или archive.php с уже готовым циклом, в котором доступны все записи с этим тегом.
В этом случае в файле tag.php достаточно просто разместить стандартный цикл:
<?php get_header(); ?>
<h1>Записи с тегом: <?php single_tag_title(); ?></h1>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<article>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<div><?php the_excerpt(); ?></div>
</article>
<?php endwhile; ?>
<?php
// Пагинация
the_posts_pagination();
?>
<?php else : ?>
<p>Записей с этим тегом не найдено.</p>
<?php endif; ?>
<?php get_footer(); ?>
Этот код выведет все посты с текущим тегом, который WordPress определит из URL автоматически.
2. Если нужно кастомно получить посты по тегу в любом шаблоне
Можно использовать класс WP_Query с параметром tag (slug тега) или tag_id (ID тега):
<?php
$tag_slug = get_query_var('tag'); // Получаем slug тега из URL
$args = array(
'post_type' => 'post', // или ваш тип записи
'posts_per_page' => 10,
'paged' => get_query_var('paged') ? get_query_var('paged') : 1,
'tag' => $tag_slug, // фильтр по тегу
'order' => 'DESC',
);
$query = new WP_Query($args);
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post(); ?>
<article>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<div><?php the_excerpt(); ?></div>
</article>
<?php endwhile;
// Пагинация
echo paginate_links(array(
'total' => $query->max_num_pages,
));
else :
echo '<p>Записей с этим тегом не найдено.</p>';
endif;
wp_reset_postdata();
?>
Важные моменты
- Для получения тега из URL используйте
get_query_var('tag'). - В параметрах
WP_Queryдля фильтрации по тегу используется ключ'tag'со значением slug тега. - Если в вашем коде не выводятся записи, проверьте, что используете
'post_type', а не'type'(частая ошибка). - Для пагинации используйте
pagedиpaginate_links(). - Если вы используете кастомные типы записей, укажите их в
'post_type'.
Итог
В WordPress не нужно писать SQL-запросы вручную для вывода записей по тегу. Достаточно:
- Использовать стандартный архив тегов с циклом WordPress в
tag.php. - Или создать кастомный запрос через
WP_Queryс параметром'tag' => $tag_slug.
Это обеспечит корректный и безопасный вывод записей с нужным тегом.