Шорткоды – это мощный инструмент WordPress, позволяющий вставлять динамический контент в записи, страницы и виджеты без необходимости писать сложный код каждый раз. В этой статье мы разберем, как создать собственный шорткод WordPress, какие возможности он открывает и как правильно использовать его в своих проектах.
Что такое шорткод WordPress и зачем он нужен
Шорткод – это специальный тег в квадратных скобках, который WordPress обрабатывает и заменяет на определенный контент или функциональность. Например, шорткод [gallery] показывает галерею изображений, а [embed] позволяет вставлять видео. Создавая свои шорткоды, вы можете быстро и удобно добавлять повторяющиеся элементы: кнопки, формы, отзывы, калькуляторы и многое другое.
Основные преимущества использования шорткодов:
- Удобство использования и внедрения сложных функций без знания кода.
- Повторное использование одного и того же функционала в разных местах сайта.
- Упрощение поддержки и обновления контента.
Создание собственного шорткода в WordPress
Регистрация шорткода через функцию add_shortcode
Чтобы зарегистрировать шорткод, нужно использовать функцию add_shortcode. Она принимает два параметра: имя шорткода и функцию, которая будет вызываться при его использовании.
Пример простого шорткода, который выводит текущий год:
function wpmark_current_year_shortcode() {
return date('Y');
}
add_shortcode('current_year', 'wpmark_current_year_shortcode');Теперь, если в редакторе вставить [current_year], то на сайте появится текущий год.
Передача параметров в шорткод
Шорткоды могут принимать параметры, которые позволяют изменять вывод. Параметры передаются в функцию в виде массива.
Рассмотрим пример шорткода, создающего кнопку с настраиваемым текстом и ссылкой:
function wpmark_button_shortcode($atts) {
$atts = shortcode_atts(
array(
'text' => 'Нажми меня',
'url' => '#'
), $atts, 'wpmark_button'
);
return '<a href="'.esc_url($atts['url']).'" class="wpmark-button">'.esc_html($atts['text']).'</a>';
}
add_shortcode('wpmark_button', 'wpmark_button_shortcode');Использование в контенте: [wpmark_button text="Перейти" url="https://wpmark.ru"]. Это создаст ссылку-кнопку с указанным текстом и адресом.
Расширение функциональности шорткодов
Обработка вложенного контента
Шорткоды могут обрабатывать не только параметры, но и вложенный контент. Для этого функция должна принимать второй аргумент – содержимое между открывающим и закрывающим тегами.
function wpmark_highlight_shortcode($atts, $content = null) {
return '<span class="wpmark-highlight">'.do_shortcode($content).'</span>';
}
add_shortcode('highlight', 'wpmark_highlight_shortcode');Использование: [highlight]Текст для выделения[/highlight]. Шорткод обернет текст в span с классом для стилизации.
Встраивание PHP-кода и безопасность
Важно понимать, что шорткоды выполняют PHP-код, поэтому нужно внимательно относиться к безопасности. Всегда используйте функции экранирования данных: esc_html(), esc_url(), wp_kses_post() и другие. Никогда не выводите пользовательский ввод без фильтрации.
Примеры полезных шорткодов для WordPress
Шорткод отображения последних записей
Иногда нужно вывести список последних статей в любом месте сайта без виджета. Вот пример шорткода для этого:
function wpmark_latest_posts_shortcode($atts) {
$atts = shortcode_atts(array('count' => 5), $atts, '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 class="wpmark-latest-posts">';
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;
}
add_shortcode('latest_posts', 'wpmark_latest_posts_shortcode');Вызов: [latest_posts count=3] — отобразит 3 последних поста.
Шорткод для вставки Google карты с настройками
Еще один полезный пример — вставка карты с указанием ширины, высоты и координат:
function wpmark_google_map_shortcode($atts) {
$atts = shortcode_atts(array(
'lat' => '55.7558',
'lng' => '37.6173',
'width' => '600',
'height' => '450',
'zoom' => 10
), $atts, 'google_map');
$iframe = '<iframe width="'.esc_attr($atts['width']).'" height="'.esc_attr($atts['height']).'" '
.'frameborder="0" style="border:0" '
.'src="https://www.google.com/maps/embed/v1/view?key=ВАШ_КЛЮЧ_API¢er='.
esc_attr($atts['lat']).','.esc_attr($atts['lng']).'&zoom='.esc_attr($atts['zoom']).'" allowfullscreen></iframe>';
return $iframe;
}
add_shortcode('google_map', 'wpmark_google_map_shortcode');Замените ВАШ_КЛЮЧ_API на реальный ключ Google Maps API. Используйте в статье: [google_map lat="59.9343" lng="30.3351" width="800" height="600" zoom="12"].
Полезные плагины для работы с шорткодами
Если вы не хотите писать шорткоды самостоятельно, можно использовать готовые решения:
- Shortcodes Ultimate — популярный плагин с большим набором шорткодов для кнопок, вкладок, галерей и т.д.
- WP Shortcode by MyThemeShop — простой и удобный набор для создания контента с помощью шорткодов.
- Custom Shortcodes — плагин для создания собственных шорткодов через админку без кода.
Эти плагины помогут быстро внедрить различные элементы на сайт без глубоких знаний PHP.
Как отлаживать и тестировать шорткоды
При разработке шорткодов важно тестировать их работу на разных страницах и с разными параметрами. Используйте:
- Включение WP_DEBUG в
wp-config.phpдля выявления ошибок. - Вывод результатов через
var_dump()илиerror_log()для отладки. - Проверку корректности HTML и экранирование выходных данных.
Для сложных шорткодов полезно писать модульные тесты с помощью PHPUnit и WP_Mock.
Заключение
Создание собственных шорткодов в WordPress — это простой и эффективный способ расширить функциональность сайта, сделать контент более динамичным и удобным для редактирования. Используя add_shortcode, вы можете создавать как простые, так и сложные решения, которые улучшат опыт пользователей и упростят работу с сайтом.
Не забывайте про безопасность, экранирование данных и тестирование. В сочетании с полезными плагинами разработка шорткодов станет приятным и продуктивным процессом.