Как сделать вывод записей по тегу средствами WordPress

В WordPress для вывода списка записей с определённым тегом в файле tag.php (или в шаблоне архива тегов) не нужно напрямую обращаться к базе данных. Можно использовать встроенные функции и класс WP_Query или глобальный цикл WordPress.

1. Использовать стандартный архив тегов

По умолчанию WordPress автоматически обрабатывает URL вида:

https://site.com/tag/название_тега/

И подгружает шаблон tag.php или archive.php с уже готовым циклом, в котором доступны все записи с этим тегом.

В этом случае в файле tag.php достаточно просто разместить стандартный цикл:

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
<?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.

Это обеспечит корректный и безопасный вывод записей с нужным тегом.

Связанные записи