Как использовать шорткоды для динамического контента в WordPress

Шорткоды — это мощный инструмент WordPress для вставки динамического и повторно используемого контента в записи, страницы и виджеты. Они позволяют разработчикам и администраторам сайтов создавать короткие текстовые метки, которые автоматически заменяются на сложный HTML, PHP или другие элементы. В этой статье мы подробно рассмотрим, как создавать и использовать шорткоды для динамического контента, а также приведём примеры кода и полезные рекомендации.

Что такое шорткоды и зачем они нужны в WordPress

Шорткод — это специальный тег, заключённый в квадратные скобки, например, [my_shortcode]. При выводе страницы WordPress заменяет этот тег на содержимое, которое определено в функции обработчике шорткода. Это удобно, так как позволяет вставлять сложный функционал без необходимости писать код в редакторе.

Динамический контент — это данные, которые меняются в зависимости от условий, например, текущая дата, список последних записей, пользовательские поля, результаты запросов к базе данных и т.д. Использование шорткодов для динамического контента позволяет легко обновлять и поддерживать информацию на сайте.

Например, шорткод [recent_posts] может выводить список последних записей, а [user_info] — данные о текущем пользователе.

Создание простого шорткода с динамическим выводом

Давайте создадим базовый шорткод, который выводит приветствие пользователю с указанием текущей даты. Для этого добавим следующий код в файл functions.php вашей темы или в собственный плагин:

function wpbest_hello_user_shortcode() {
    $current_user = wp_get_current_user();
    $date = date_i18n('j F Y');
    if ($current_user->exists()) {
        return 'Привет, ' . esc_html($current_user->display_name) . '! Сегодня ' . $date;
    } else {
        return 'Привет, гость! Сегодня ' . $date;
    }
}
add_shortcode('hello_user', 'wpbest_hello_user_shortcode');

Этот шорткод [hello_user] выведет на страницу приветствие для залогиненного пользователя с его именем и текущей датой, а для гостей — универсальное приветствие.

Разбор кода

  • wp_get_current_user() — получает объект текущего пользователя.
  • date_i18n() — функция WordPress для вывода даты с учётом локализации.
  • Функция возвращает строку с приветствием, которая и подставляется вместо шорткода.

Шорткод с атрибутами: вывод последних записей

Часто шорткоды требуют параметров, чтобы управлять выводом. Создадим шорткод [wpbest_recent_posts count="5" category="news"], который выводит список последних записей из указанной категории и в указанном количестве.

function wpbest_recent_posts_shortcode($atts) {
    $atts = shortcode_atts(
        array(
            'count' => 3,
            'category' => ''
        ), $atts, 'wpbest_recent_posts'
    );

    $args = array(
        'posts_per_page' => intval($atts['count']),
        'post_status' => 'publish'
    );

    if (!empty($atts['category'])) {
        $args['category_name'] = sanitize_text_field($atts['category']);
    }

    $query = new WP_Query($args);
    if (!$query->have_posts()) {
        return 'Записи не найдены.';
    }

    $output = '<ul>';
    while ($query->have_posts()) {
        $query->the_post();
        $output .= '<li><a href="' . esc_url(get_permalink()) . '">' . esc_html(get_the_title()) . '</a></li>';
    }
    wp_reset_postdata();
    $output .= '</ul>';

    return $output;
}
add_shortcode('wpbest_recent_posts', 'wpbest_recent_posts_shortcode');

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

  • [wpbest_recent_posts count="5" category="technology"] — выведет 5 последних записей из категории «technology».
  • [wpbest_recent_posts] — выведет 3 последних записи (по умолчанию).

Советы по безопасности и производительности

Обязательно используйте функции esc_html(), esc_url() и sanitize_text_field() для очистки данных, чтобы избежать XSS-уязвимостей.

Для снижения нагрузки на сервер в шорткодах с запросами к базе данных рекомендуется использовать кэширование результата через Transients API или сторонние плагины.

Расширенные возможности: вложенные шорткоды и AJAX

Иногда нужно, чтобы шорткоды взаимодействовали друг с другом или динамически подгружали данные без перезагрузки страницы. Рассмотрим пример использования AJAX для вывода списка комментариев к посту по шорткоду.

1. Создаём шорткод с кнопкой для загрузки комментариев:

function wpbest_load_comments_shortcode($atts) {
    $atts = shortcode_atts(array('post_id' => 0), $atts, 'wpbest_load_comments');
    if (!$atts['post_id']) return 'ID поста не указан.';

    wp_enqueue_script('wpbest-comments-ajax', get_stylesheet_directory_uri() . '/js/wpbest-comments.js', array('jquery'), null, true);
    wp_localize_script('wpbest-comments-ajax', 'wpbestAjax', array(
        'ajaxurl' => admin_url('admin-ajax.php'),
        'post_id' => intval($atts['post_id'])
    ));

    return '<button id="wpbest-load-comments" data-post_id="' . intval($atts['post_id']) . '">Показать комментарии</button><div id="wpbest-comments-container"></div>';
}
add_shortcode('wpbest_load_comments', 'wpbest_load_comments_shortcode');

2. Создаём обработчик AJAX в functions.php:

function wpbest_ajax_load_comments() {
    $post_id = intval($_POST['post_id']);
    if (!$post_id) {
        wp_send_json_error('Неверный ID поста');
    }

    $comments = get_comments(array('post_id' => $post_id, 'status' => 'approve'));
    if (empty($comments)) {
        wp_send_json_success('<p>Комментариев нет.</p>');
    }

    ob_start();
    echo '<ul>';
    foreach ($comments as $comment) {
        echo '<li>' . esc_html($comment->comment_author) . ': ' . esc_html($comment->comment_content) . '</li>';
    }
    echo '</ul>';

    $html = ob_get_clean();
    wp_send_json_success($html);
}
add_action('wp_ajax_wpbest_load_comments', 'wpbest_ajax_load_comments');
add_action('wp_ajax_nopriv_wpbest_load_comments', 'wpbest_ajax_load_comments');

3. JS-файл wpbest-comments.js для отправки AJAX-запроса:

jQuery(document).ready(function($) {
    $('#wpbest-load-comments').on('click', function() {
        var post_id = $(this).data('post_id');
        $.post(wpbestAjax.ajaxurl, {
            action: 'wpbest_load_comments',
            post_id: post_id
        }, function(response) {
            if (response.success) {
                $('#wpbest-comments-container').html(response.data);
            } else {
                alert('Ошибка загрузки комментариев');
            }
        });
    });
});

Лучшие плагины для работы с шорткодами и динамическим контентом

Для расширения возможностей шорткодов и упрощения их создания можно использовать готовые плагины:

  • Shortcoder — позволяет создавать собственные шорткоды с HTML, JavaScript и PHP без программирования.
  • WPGPT (https://wpshop.ru/plugins/wpgpt/?utm_source=wpbest.ru&utm_medium=article&utm_campaign=kak-ispolzovat-shortkody-dlya-dinamicheskogo-kontenta-v-wordpress) — интеграция с GPT для генерации контента через шорткоды.
  • Clearfy Pro — оптимизация и управление функционалом сайта, включая расширенные возможности шорткодов.

Использование таких плагинов сокращает время разработки и позволяет создавать уникальный динамический контент без глубоких знаний программирования.

Практические рекомендации по организации шорткодов на сайте

Чтобы шорткоды работали корректно и легко поддерживались, придерживайтесь следующих правил:

  • Используйте префиксы в названиях функций и шорткодов (например, wpbest_), чтобы избежать конфликтов с другими плагинами.
  • Очистка и валидация входных данных обязательны для безопасности.
  • Кэшируйте результаты сложных запросов для уменьшения нагрузки.
  • Документируйте шорткоды и их атрибуты, чтобы другие разработчики и контент-менеджеры понимали их назначение.
  • Тестируйте шорткоды в разных условиях (залогиненный пользователь, гость, разные роли).
Как создать отслеживание пользовательских действий в WordPress с помощью AJAX и REST API
10.01.2026
Как удалить метаданные из медиа файлов WordPress для защиты конфиденциальности
22.02.2026
Как использовать кастомные статусы заказов в WooCommerce
04.05.2026
Динамическое отображение изображений в WordPress: практическое руководство
05.02.2026
Как добавить собственный тип записи (custom post type) в WordPress
29.11.2025