Что такое shortcode в WordPress и зачем они нужны
Shortcode — это специальная метка в квадратных скобках, которую WordPress автоматически заменяет на определенный контент или функциональность при выводе страницы. Они позволяют добавлять сложные элементы в посты и страницы без необходимости писать HTML или PHP код вручную. Например, шорткоды используются для вставки форм, галерей, кнопок и многого другого.
Создание собственных шорткодов расширяет возможности сайта, позволяя внедрять уникальные функции, адаптированные именно под ваши задачи. Это особенно полезно, если стандартных плагинов недостаточно или вы хотите оптимизировать производительность.
В этой статье мы разберем, как создать собственный shortcode в WordPress, разберем примеры с кодом и советы по безопасности и производительности.
Создание простого шорткода: базовый пример
Для начала создадим самый простой шорткод, который выводит приветствие. Добавьте следующий код в functions.php вашей темы или в файл собственного плагина:
function wptool_hello_shortcode() {
return '<p>Привет, это мой первый шорткод!</p>';
}
add_shortcode('wptool_hello', 'wptool_hello_shortcode');Теперь, если в любом посте или странице вставить [wptool_hello], WordPress заменит его на <p>Привет, это мой первый шорткод!</p>.
Обратите внимание, что функция должна возвращать значение, а не выводить его напрямую через echo. Это важное правило при создании шорткодов.
Как использовать параметры в шорткодах
Чаще всего нужно передавать параметры в шорткод для динамического вывода. Добавим параметр name для персонализации приветствия:
function wptool_hello_shortcode($atts) {
$atts = shortcode_atts(array(
'name' => 'гость'
), $atts, 'wptool_hello');
return '<p>Привет, ' . esc_html($atts['name']) . '!</p>';
}
add_shortcode('wptool_hello', 'wptool_hello_shortcode');Теперь вызов [wptool_hello name="Иван"] выведет <p>Привет, Иван!</p>. Функция shortcode_atts объединяет переданные параметры с дефолтными, а esc_html предотвращает XSS-уязвимости.
Создание более сложного шорткода с выводом списка последних записей
Рассмотрим пример шорткода, который выводит список последних записей блога с ссылками. Такой функционал часто нужен в сайтах на WordPress для улучшения навигации.
function wptool_latest_posts_shortcode($atts) {
$atts = shortcode_atts(array(
'count' => 5
), $atts, 'wptool_latest_posts');
$query = new WP_Query(array(
'posts_per_page' => intval($atts['count']),
'post_status' => 'publish'
));
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('wptool_latest_posts', 'wptool_latest_posts_shortcode');Вы можете использовать [wptool_latest_posts count="10"], чтобы вывести 10 последних записей. Обратите внимание на важность очистки данных и вызова wp_reset_postdata() после цикла.
Оптимизация и безопасность шорткодов
При создании шорткодов важно учитывать несколько моментов:
- Валидация и экранирование: Все входные данные должны быть валидированы и экранированы. Используйте
shortcode_attsдля параметров и функции вродеesc_html,esc_url. - Возврат, а не вывод: Функция шорткода должна возвращать строку, а не выводить напрямую. Это даёт гибкость и предотвращает ошибки.
- Производительность: Избегайте дорогостоящих запросов в цикле, кешируйте вывод при необходимости.
Популярные плагины для работы с шорткодами
Для расширения возможностей шорткодов можно использовать следующие плагины:
- Shortcodes Ultimate — мощный набор готовых шорткодов с визуальным редактором.
- WP Shortcode by MyThemeShop — простой и легкий плагин с базовыми элементами.
- Custom Post Type UI — для создания пользовательских типов записей, которые можно выводить через собственные шорткоды.
Иногда лучше использовать готовые решения, но создание собственных шорткодов даёт максимальную гибкость и позволяет оптимизировать код под конкретные задачи.
Как подключать шорткоды в шаблонах темы
Шорткоды обычно используются внутри постов и страниц, но их также можно выводить напрямую в PHP-шаблонах тем. Для этого используется функция do_shortcode:
echo do_shortcode('[wptool_hello name="Мир"]');Это позволяет интегрировать динамический контент, созданный шорткодами, в любую часть сайта.
Создание шорткодов с поддержкой вложенного контента
Иногда необходимо, чтобы шорткод обрабатывал вложенный контент между открывающим и закрывающим тегами. Для этого в функцию добавляется второй параметр $content и используется параметр $shortcode_tags:
function wptool_box_shortcode($atts, $content = null) {
$atts = shortcode_atts(array(
'title' => 'Заголовок'
), $atts, 'wptool_box');
$output = '<div class="wptool-box">';
$output .= '<h3>' . esc_html($atts['title']) . '</h3>';
$output .= '<div class="content">' . do_shortcode($content) . '</div>';
$output .= '</div>';
return $output;
}
add_shortcode('wptool_box', 'wptool_box_shortcode');Использование:
[wptool_box title="Важное сообщение"]Текст внутри блока[/wptool_box]
Такой подход позволяет создавать гибкие и многоуровневые конструкции.