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

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

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

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

Использование кастомных шорткодов помогает:

  • Сократить время на добавление повторяющихся элементов (кнопок, блоков, форм).
  • Обеспечить удобство для контент-менеджеров, которые могут вставлять сложные элементы без знаний кода.
  • Поддерживать чистоту и структуру кода, отделяя логику от контента.

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

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

function wp2_create_button_shortcode($atts, $content = null) {
    $atts = shortcode_atts( array(
        'url' => '#',
        'color' => 'blue'
    ), $atts, 'wp2_button' );

    return '<a href="'.esc_url($atts['url']).'" style="background-color:'.esc_attr($atts['color']).'; padding:10px 20px; color:#fff; text-decoration:none; border-radius:4px;">'.esc_html($content).'</a>';
}
add_shortcode('wp2_button', 'wp2_create_button_shortcode');

В этом примере создан шорткод [wp2_button url="https://2wp.ru" color="red"]Кнопка[/wp2_button], который выводит стилизованную кнопку с заданной ссылкой и цветом. Атрибуты задаются через массив shortcode_atts, а содержимое — через параметр $content.

Разбор кода

Функция wp2_create_button_shortcode принимает два параметра: массив атрибутов и содержимое между тегами шорткода. Мы задаем значения по умолчанию, чтобы избежать ошибок, если атрибуты не переданы. Внутри функции формируем HTML-код ссылки с inline-стилями, применяем экранирование для безопасности и возвращаем результат.

Расширенный пример: шорткод для вывода списка последних записей

Создадим шорткод, который выводит список последних записей блога с возможностью задать количество и категорию.

function wp2_latest_posts_shortcode($atts) {
    $atts = shortcode_atts( array(
        'count' => 5,
        'category' => ''
    ), $atts, 'wp2_latest_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 '<p>Записи не найдены.</p>';
    }

    $output = '<ul class="wp2-latest-posts">';

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

    wp_reset_postdata();

    $output .= '</ul>';

    return $output;
}
add_shortcode('wp2_latest_posts', 'wp2_latest_posts_shortcode');

Шорткод [wp2_latest_posts count="3" category="novosti"] выведет 3 последних записи из категории «novosti». Если категория не указана, выводятся записи из всех категорий.

Объяснение

Мы используем класс WP_Query для выборки записей с учетом параметров. В цикле формируем список с ссылками на записи. Обязательно вызываем wp_reset_postdata() после цикла, чтобы не ломать глобальные переменные WordPress.

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

Безопасность и экранирование

Всегда используйте функции экранирования, такие как esc_html(), esc_url() и esc_attr(), чтобы предотвратить XSS-атаки через пользовательские данные.

Кэширование результатов

Если шорткод выполняет тяжелые запросы, имеет смысл добавить кэширование. Можно использовать транзиенты WordPress, чтобы снизить нагрузку на базу данных:

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

    // Код запроса и формирования вывода, как в предыдущем примере

    set_transient($cache_key, $output, HOUR_IN_SECONDS);
    return $output;
}

Использование шорткодов в виджетах и Gutenberg

Чтобы шорткоды работали в виджетах, нужно добавить поддержку через фильтр:

add_filter('widget_text', 'do_shortcode');

В редакторе Gutenberg можно использовать блок «Короткий код» и вставлять туда ваш шорткод.

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

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

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

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

Итог

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

Как использовать WordPress Transients для оптимизации производительности сайта
04.12.2025
Как создать кастомный шорткод в WordPress: подробное руководство
06.11.2025
Как удалить кэш в WordPress: практическое руководство
21.11.2025
Как создать собственный REST API endpoint в WordPress: пошаговое руководство
27.11.2025
Автоматическое создание миниатюр (thumbnail) для картинок в WordPress: практическое руководство
01.12.2025