Автоматическое создание собственного шорткода с параметрами в 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');

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

Как удалить или изменить определённые записи WooCommerce после оформления заказа
18.04.2026
Использование хука WooCommerce после завершения заказа для кастомных действий
19.03.2026
Создать и использовать собственный тип записи (Custom Post Type) в WordPress с примерами кода
14.01.2026
Автоматическое удаление спам-комментариев в WordPress
26.01.2026
Оптимизация WordPress для мобильных устройств: практическое руководство
22.03.2026