Создание собственного шорткода в WordPress: практическое руководство

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

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

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

Создание своих шорткодов позволяет:

  • Вставлять динамический контент без постоянного редактирования темы или плагинов.
  • Упрощать работу редакторов и авторов сайта, предоставляя готовые блоки.
  • Повысить гибкость и расширяемость своего сайта.

Рассмотрим, как это сделать правильно и с практическими примерами.

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

Для добавления шорткода используется функция add_shortcode. Она принимает два параметра: название шорткода и функцию-обработчик, которая возвращает HTML или другой вывод.

Пример регистрации самого простого шорткода:

function wpunit_hello_shortcode() {
    return '<p>Привет, это мой первый шорткод!</p>';
}
add_shortcode('wpunit_hello', 'wpunit_hello_shortcode');

После добавления этого кода в файл functions.php вашей темы или в файл вашего плагина, вы сможете использовать шорткод [wpunit_hello] в любом месте контента, и он выведет заданный текст.

Важно, чтобы функция возвращала результат через return, а не выводила через echo, иначе шорткод может работать некорректно.

Рекомендации по именованию функций

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

Создание шорткода с атрибутами и динамическим контентом

Шорткоды могут принимать параметры, которые задаются в квадратных скобках, например, [wpunit_hello name="Иван"]. Эти параметры передаются в функцию в виде массива.

Пример шорткода с атрибутами:

function wpunit_hello_name_shortcode($atts) {
    // Задаём значения по умолчанию
    $atts = shortcode_atts(
        array(
            'name' => 'гость',
        ), $atts, 'wpunit_hello_name'
    );

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

Теперь при использовании шорткода [wpunit_hello_name name="Алексей"] на сайте выведется «Привет, Алексей! Добро пожаловать на сайт.»

Безопасность данных в шорткодах

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

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

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

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

    $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('wpunit_recent_posts', 'wpunit_recent_posts_shortcode');

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

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

Этот шорткод выведет список из 3 последних записей категории «новости».

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

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

Пример:

echo do_shortcode('[wpunit_hello_name name="Мария"]');

Так вы можете интегрировать шорткод в любой участок шаблона.

Популярные плагины для расширения возможностей шорткодов

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

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

Однако если у вас есть базовые знания PHP, создание собственных шорткодов — самый гибкий и производительный вариант.

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

При разработке шорткодов обязательно:

  • Тестируйте вывод на разных страницах и с разными параметрами.
  • Проверяйте, что функции не вызывают ошибок и не влияют на производительность.
  • Используйте wp_reset_postdata() после запросов WP_Query, чтобы избежать конфликтов с основным циклом.
  • Соблюдайте стандарты кодирования и именования функций.

Это поможет вам создавать надёжные и удобные шорткоды для любых задач.

⭐⭐⭐⭐⭐