Автоматическое создание собственного шорткода с параметрами в WordPress

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

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

Стандартный шорткод позволяет выводить фиксированный контент, но в большинстве случаев нужен динамический вывод, где параметры управляют отображением. Например, можно передавать ID записи, количество элементов для отображения, тип контента и так далее.

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

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

Регистрация шорткода в WordPress: базовые моменты

Для создания шорткода в WordPress применяется функция add_shortcode. Она принимает два аргумента — тег шорткода и функцию обработки.

Пример базового шорткода без параметров:

function _2wp_simple_shortcode() {
    return 'Привет, это простой шорткод!';
}
add_shortcode('simple_2wp', '_2wp_simple_shortcode');

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

Создаем универсальную функцию регистрации шорткода с параметрами

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

function _2wp_register_shortcode($tag, $defaults, $callback) {
    add_shortcode($tag, function($atts, $content = null) use ($defaults, $callback) {
        $atts = shortcode_atts($defaults, $atts, $tag);
        return call_user_func($callback, $atts, $content);
    });
}

Что здесь происходит:

  • $tag — имя шорткода.
  • $defaults — массив параметров по умолчанию.
  • $callback — функция обработки с логикой вывода.

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

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

Давайте создадим шорткод [_2wp_latest_posts count="5" category=""], который выводит последние записи определенной категории и в указанном количестве.

function _2wp_latest_posts_shortcode($atts) {
    $args = [
        '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="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    wp_reset_postdata();
    $output .= '</ul>';
    return $output;
}

_2wp_register_shortcode('_2wp_latest_posts', ['count' => 5, 'category' => ''], '_2wp_latest_posts_shortcode');

Теперь достаточно вставить в редактор шорткод [_2wp_latest_posts count="3" category="news"], чтобы вывести три последних записи из категории «news».

Обработка ошибок и валидация параметров

Важно не только принимать параметры, но и валидировать их — чтобы избежать ошибок и XSS-уязвимостей. В примере выше мы:

  • Преобразовали count в целое число через intval.
  • Очистили category через sanitize_text_field.

Также стоит предусмотреть дефолтные значения и вывод сообщений, если данные не найдены.

Пример расширенной проверки параметров

function _2wp_sanitize_shortcode_atts($atts, $defaults) {
    $sanitized = [];
    foreach ($defaults as $key => $value) {
        if (isset($atts[$key])) {
            switch (gettype($value)) {
                case 'integer':
                    $sanitized[$key] = intval($atts[$key]);
                    break;
                case 'string':
                    $sanitized[$key] = sanitize_text_field($atts[$key]);
                    break;
                default:
                    $sanitized[$key] = $atts[$key];
            }
        } else {
            $sanitized[$key] = $value;
        }
    }
    return $sanitized;
}

Вызов можно встроить в нашу универсальную функцию регистрации для автоматической валидации.

Как внедрить шорткод в тему или плагин

Лучшее место для регистрации шорткодов — функция functions.php вашей темы или отдельный плагин. Если используете плагин, регистрация шорткода должна происходить на хук init или plugins_loaded для корректной загрузки.

Пример регистрации в теме:

add_action('init', function() {
    _2wp_register_shortcode('_2wp_latest_posts', ['count' => 5, 'category' => ''], '_2wp_latest_posts_shortcode');
});
<

Если вы используете плагин Clearfy Pro от WPSHOP, он позволяет оптимизировать нагрузку и улучшить безопасность шорткодов, что полезно при большом количестве динамических вставок.

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

1. Добавьте поддержку вложенного контента (парных шорткодов) для более сложных структур.

2. Используйте кэширование вывода с помощью Transients API, чтобы снизить нагрузку при частом использовании шорткодов.

3. Добавьте интеграцию с WP REST API для динамического обновления содержимого без перезагрузки страниц.

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

function _2wp_cached_latest_posts_shortcode($atts) {
    $atts = shortcode_atts(['count' => 5, 'category' => ''], $atts, '_2wp_latest_posts');
    $cache_key = '_2wp_latest_posts_' . md5(serialize($atts));
    $output = get_transient($cache_key);
    if ($output !== false) {
        return $output;
    }

    $output = _2wp_latest_posts_shortcode($atts);
    set_transient($cache_key, $output, 3600); // кэш на 1 час
    return $output;
}

_2wp_register_shortcode('_2wp_latest_posts_cached', ['count' => 5, 'category' => ''], '_2wp_cached_latest_posts_shortcode');

Это позволит значительно ускорить загрузку страниц при частом вызове шорткода.

Как удалить кэш в WordPress: практическое руководство
21.11.2025
Как запретить доступ к определённому контенту по ролям в WordPress
19.01.2026
Как создать собственный REST API endpoint в WordPress
27.11.2025
Как добавить собственные виджеты в WordPress
24.11.2025
Как использовать хуки для изменения функционала WordPress
17.11.2025