Как создать собственный шорткод в WordPress

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

Что такое шорткод в WordPress и зачем создавать свой

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

Преимущества собственного шорткода:

  • Повторное использование кода в разных местах сайта.
  • Упрощение работы редакторов и пользователей сайта.
  • Гибкость и расширяемость функционала без изменения темы.

Далее рассмотрим, как создать шорткод на примере сайта wp3.ru.

Создание простого шорткода в WordPress: базовый пример

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

function wp3_hello_shortcode($atts) {
    $atts = shortcode_atts(array(
        'name' => 'Гость',
    ), $atts, 'wp3_hello');

    return '<p>Привет, ' . esc_html($atts['name']) . '! Добро пожаловать на wp3.ru.</p>';
}
add_shortcode('wp3_hello', 'wp3_hello_shortcode');

Объяснение:

  • shortcode_atts задаёт атрибуты по умолчанию. В нашем случае это name с значением «Гость».
  • Функция возвращает строку с приветствием, в которую подставляется значение атрибута.
  • Функция регистрируется через add_shortcode с тегом wp3_hello.

Пример использования в записи или странице:

[wp3_hello name="Алексей"]

Результат: <p>Привет, Алексей! Добро пожаловать на wp3.ru.</p>

Расширение шорткода: добавление логики и параметров

Теперь усложним пример. Сделаем шорткод, который выводит список последних 5 публикаций выбранной категории. Добавим параметр category для указания категории по слагу.

function wp3_recent_posts_shortcode($atts) {
    $atts = shortcode_atts(array(
        'category' => '',
        'count' => 5,
    ), $atts, 'wp3_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']);
    }

    $posts = get_posts($args);
    if (empty($posts)) {
        return '<p>Публикаций не найдено.</p>';
    }

    $output = '<ul>';
    foreach ($posts as $post) {
        $title = esc_html(get_the_title($post));
        $url = esc_url(get_permalink($post));
        $output .= "<li><a href=\"$url\">$title</a></li>";
    }
    $output .= '</ul>';

    return $output;
}
add_shortcode('wp3_recent_posts', 'wp3_recent_posts_shortcode');

Использование:

[wp3_recent_posts category="novosti" count="3"]

Выведет три последние опубликованные записи из категории с ярлыком novosti.

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

При создании шорткодов важно соблюдать несколько правил:

  • Санитизация входных данных. Всегда используйте функции sanitize_text_field, intval и другие для очистки параметров шорткода.
  • Экранирование вывода. Для вывода текста применяйте esc_html и esc_url для URL, чтобы избежать XSS-уязвимостей.
  • Минимизируйте нагрузку на базу данных. Кешируйте результаты, если шорткод вызывается часто. Можно использовать Transients API для временного хранения данных.

Пример кеширования с Transients API

function wp3_recent_posts_cached_shortcode($atts) {
    $atts = shortcode_atts(array(
        'category' => '',
        'count' => 5,
    ), $atts, 'wp3_recent_posts_cached');

    $cache_key = 'wp3_recent_posts_' . md5(serialize($atts));
    $cached = get_transient($cache_key);
    if ($cached !== false) {
        return $cached;
    }

    // Логика получения постов аналогична предыдущему примеру
    $args = array(
        'posts_per_page' => intval($atts['count']),
        'post_status' => 'publish',
    );
    if (!empty($atts['category'])) {
        $args['category_name'] = sanitize_text_field($atts['category']);
    }
    $posts = get_posts($args);
    if (empty($posts)) {
        return '<p>Публикаций не найдено.</p>';
    }

    $output = '<ul>';
    foreach ($posts as $post) {
        $title = esc_html(get_the_title($post));
        $url = esc_url(get_permalink($post));
        $output .= "<li><a href=\"$url\">$title</a></li>";
    }
    $output .= '</ul>';

    set_transient($cache_key, $output, 3600); // Кеш на 1 час

    return $output;
}
add_shortcode('wp3_recent_posts_cached', 'wp3_recent_posts_cached_shortcode');

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

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

  • Shortcodes Ultimate — набор из более чем 50 готовых шорткодов с визуальным редактором.
  • WP Shortcode by MyThemeShop — простой плагин с полезными шорткодами для контента.
  • Custom Content Shortcode — позволяет создавать шорткоды для вывода кастомного контента без программирования.

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

Как отладить и протестировать свои шорткоды

Разработка шорткодов требует тестирования и отладки. Вот несколько рекомендаций:

  • Используйте функцию do_shortcode для тестирования в темах и плагинах.
  • Проверяйте вывод на разных страницах и в разных условиях.
  • Логируйте ошибки с помощью error_log или специальных плагинов для отладки.
  • Тестируйте ввод неправильных и пустых параметров, чтобы шорткод не выводил ошибки.

Пример вызова шорткода из PHP-кода:

echo do_shortcode('[wp3_hello name="Тест"]');

Выводы

Создание собственных шорткодов позволяет гибко расширять функционал WordPress без изменения темы и облегчает работу контент-менеджеров. Соблюдая правила безопасности и оптимизации, вы получите мощный инструмент для кастомизации сайта на wp3.ru или любом другом ресурсе.

Оптимальная настройка WooCommerce для высокой производительности и стабильности
23.12.2025
Как использовать хук 'comment_post' для управления комментариями в WordPress
15.12.2025
Как добавить внешний API в WordPress с помощью WPGPT
13.02.2026
Как массово удалить и изменить атрибуты alt у изображений в WordPress
07.01.2026
Как удалить или изменить slug категории в WordPress без потери SEO
26.12.2025