Отображение записей по тегам — частая задача при разработке сайтов на WordPress. Особенно когда нужно динамически выводить связанные материалы, чтобы улучшить навигацию и удерживать пользователей на сайте. В этой статье разберём, как автоматически выводить посты по определённым тегам с помощью WP_Query, создавать шорткоды и использовать AJAX для динамического обновления контента без перезагрузки страницы.
Почему важно автоматически отображать записи по тегам
Теги помогают структурировать контент и облегчают поиск похожих материалов. Ручное добавление блоков с постами по тегам неудобно и не масштабируется. Автоматизация решения позволяет:
- Динамически выводить актуальные записи с нужными тегами
- Улучшить SEO за счёт внутренней перелинковки
- Повысить время пребывания пользователей на сайте
Например, на сайте wprobot.ru, где публикуются статьи о WordPress, можно автоматически выводить посты по тегу автоматизация внизу каждой статьи с похожей тематикой.
Использование WP_Query для вывода постов по тегам
Основной инструмент для выборки записей в WordPress — класс WP_Query. Чтобы получить посты по тегу, достаточно сформировать правильный запрос:
function wprobot_get_posts_by_tag($tag_slug, $posts_per_page = 5) {
$args = array(
'tag' => $tag_slug,
'posts_per_page' => $posts_per_page,
'post_status' => 'publish',
'ignore_sticky_posts' => true
);
$query = new WP_Query($args);
if ($query->have_posts()) {
echo '<ul class="wprobot-posts-by-tag">';
while ($query->have_posts()) {
$query->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
echo '</ul>';
wp_reset_postdata();
} else {
echo '<p>Посты с тегом «' . esc_html($tag_slug) . '» не найдены.</p>';
}
}Этот код можно использовать в шаблонах темы, чтобы вывести посты по нужному тегу. Например, для тега wordpress вызов будет wprobot_get_posts_by_tag('wordpress');.
Создание шорткода для вывода постов по тегам
Чтобы редакторы контента могли вставлять списки постов по тегам в записи и страницы, создадим шорткод:
function wprobot_shortcode_posts_by_tag($atts) {
$atts = shortcode_atts(array(
'tag' => '',
'count' => 5
), $atts, 'posts_by_tag');
ob_start();
if (!empty($atts['tag'])) {
wprobot_get_posts_by_tag(sanitize_text_field($atts['tag']), intval($atts['count']));
} else {
echo '<p>Укажите тег для вывода постов.</p>';
}
return ob_get_clean();
}
add_shortcode('posts_by_tag', 'wprobot_shortcode_posts_by_tag');Теперь в редакторе можно написать [posts_by_tag tag="wordpress" count="3"], и появится список из трёх постов с тегом «wordpress».
Динамический вывод постов по тегам через AJAX
Иногда нужно менять список постов по тегам без перезагрузки страницы, например, при выборе тега из выпадающего списка. Реализуем AJAX-запрос для этого.
Регистрация AJAX обработчика в functions.php
add_action('wp_ajax_wprobot_get_posts_by_tag', 'wprobot_ajax_get_posts_by_tag');
add_action('wp_ajax_nopriv_wprobot_get_posts_by_tag', 'wprobot_ajax_get_posts_by_tag');
function wprobot_ajax_get_posts_by_tag() {
$tag = isset($_POST['tag']) ? sanitize_text_field($_POST['tag']) : '';
if (!$tag) {
wp_send_json_error('Тег не передан');
}
ob_start();
wprobot_get_posts_by_tag($tag, 5);
$html = ob_get_clean();
wp_send_json_success($html);
}JavaScript для вызова AJAX и отображения результатов
Подключаем скрипт, например в footer.php или через wp_enqueue_script, и добавим HTML для выбора тега:
<select id="wprobot-tag-select">
<option value="wordpress">WordPress</option>
<option value="plugin">Плагины</option>
<option value="theme">Темы</option>
</select>
<div id="wprobot-posts-container"></div>
<script>
(function($){
$('#wprobot-tag-select').on('change', function() {
var tag = $(this).val();
$.ajax({
url: '<?php echo admin_url('admin-ajax.php'); ?>',
method: 'POST',
data: {
action: 'wprobot_get_posts_by_tag',
tag: tag
},
success: function(response) {
if(response.success) {
$('#wprobot-posts-container').html(response.data);
} else {
$('#wprobot-posts-container').html('<p>Ошибка загрузки постов</p>');
}
},
error: function() {
$('#wprobot-posts-container').html('<p>Ошибка запроса</p>');
}
});
});
// Инициируем первый запрос
$('#wprobot-tag-select').trigger('change');
})(jQuery);
</script>Так пользователь сможет выбирать тег, а список постов будет обновляться без перезагрузки страницы.
Использование плагинов для автоматического вывода постов по тегам
Если не хочется писать код, можно использовать плагины. Например:
- Related Posts Thumbnails — выводит похожие записи по тегам или категориям с миниатюрами.
- Contextual Related Posts — гибкие настройки, вывод похожих постов, поддержка шорткодов и виджетов.
- WP Remark — плагин с возможностями персонализации и автоматизации вывода релевантного контента, доступен на wpshop.ru.
Выбор зависит от задач и требований к дизайну и функционалу.
Советы по оптимизации и безопасности
При автоматическом выводе постов по тегам важно учитывать производительность и безопасность:
- Кешируйте результаты запросов, чтобы снизить нагрузку на базу данных. Можно использовать Transients API.
- Обязательно фильтруйте входящие данные через
sanitize_text_fieldили аналогичные функции. - Учитывайте количество выводимых записей — слишком большой вывод замедлит страницу.
- Используйте
ignore_sticky_posts, чтобы не дублировать закреплённые записи. - Проверяйте, что тег существует, прежде чем делать запрос.
Заключение
Автоматический вывод постов по тегам — мощный инструмент для улучшения структуры сайта и взаимодействия с пользователями. Используя WP_Query, шорткоды и AJAX, можно создать гибкое и удобное решение без излишней нагрузки. При необходимости дополнить функционал можно плагинами, такими как WP Remark с wpshop.ru. Главное — продуманность и безопасность кода.