Шорткоды в 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');Это позволит значительно ускорить загрузку страниц при частом вызове шорткода.