Шорткоды в WordPress — это мощный инструмент для добавления динамического контента на страницы, записи и виджеты без необходимости писать сложный код прямо в редакторе. В этой статье подробно разберем, как создавать и использовать шорткоды в WordPressy, чтобы расширить функциональность сайта, сделать контент более интерактивным и удобным для управления.
Что такое шорткоды в WordPress: базовые понятия
Шорткод — это специальный тег в квадратных скобках, который WordPress распознает и заменяет на определённый контент при выводе страницы. Например, [gallery] — стандартный шорткод для вставки галереи изображений.
Преимущество шорткодов в том, что их можно использовать многократно, они динамичны и позволяют избежать дублирования кода. Кроме того, шорткоды можно создавать самостоятельно, чтобы реализовать уникальные задачи и интеграции.
Для создания собственного шорткода в WordPress используется функция add_shortcode(), которая связывает имя шорткода с функцией, возвращающей нужный контент.
Как создать шорткод в WordPressy: практический пример с параметрами
Рассмотрим, как создать простой шорткод [wpys_current_year], который будет выводить текущий год. Это полезно, например, для автоматического обновления копирайта в подвале сайта.
function wordpressy_current_year_shortcode() {
return date('Y');
}
add_shortcode('wpys_current_year', 'wordpressy_current_year_shortcode');Вставьте [wpys_current_year] в любой текстовый блок редактора — и на сайте отобразится текущий год.
Теперь усложним пример и добавим параметр. Создадим шорткод [wpys_button url="https://wordpressy.ru" text="Перейти на сайт"], который выведет кнопку с заданной ссылкой и текстом.
function wordpressy_button_shortcode($atts) {
$atts = shortcode_atts(
array(
'url' => '#',
'text' => 'Кнопка',
), $atts, 'wpys_button'
);
return '<a href="' . esc_url($atts['url']) . '" class="wpys-button">' . esc_html($atts['text']) . '</a>';
}
add_shortcode('wpys_button', 'wordpressy_button_shortcode');Чтобы кнопка выглядела красиво, добавьте CSS в тему или плагин:
.wpys-button {
display: inline-block;
padding: 10px 20px;
background-color: #0073aa;
color: #fff;
text-decoration: none;
border-radius: 4px;
transition: background-color 0.3s ease;
}
.wpys-button:hover {
background-color: #005177;
}Использование вложенных шорткодов и обработка сложного контента
Иногда требуется, чтобы шорткод принимал другой шорткод или HTML внутри себя. Для этого в функции обработчика нужно использовать функцию do_shortcode() для обработки вложенного контента.
Например, создадим шорткод [wpys_box], который оборачивает контент в стилизованный блок:
function wordpressy_box_shortcode($atts, $content = null) {
return '<div class="wpys-box">' . do_shortcode($content) . '</div>';
}
add_shortcode('wpys_box', 'wordpressy_box_shortcode');CSS для блока:
.wpys-box {
border: 2px solid #0073aa;
padding: 15px;
background-color: #f0f8ff;
border-radius: 6px;
margin: 10px 0;
}Теперь можно комбинировать шорткоды, например:
[wpys_box]Текст внутри блока и кнопка: [wpys_button url="https://wordpressy.ru" text="Перейти"][/wpys_box]
Расширенные возможности шорткодов: использование AJAX для динамического контента
Для более сложных задач шорткоды можно использовать вместе с AJAX, чтобы подгружать или обновлять контент без перезагрузки страницы. Это актуально для форм обратной связи, фильтров, загрузки постов и др.
Пример: создадим шорткод [wpys_random_post], который выводит случайный заголовок поста при загрузке и обновляется по кнопке без перезагрузки.
PHP (functions.php или плагин):
function wordpressy_random_post_shortcode() {
ob_start();
?>
<div id="wpys-random-post"></div>
<button id="wpys-load-post">Загрузить случайный пост</button>
<script>
document.getElementById('wpys-load-post').addEventListener('click', function() {
fetch('<?php echo admin_url('admin-ajax.php?action=wpys_get_random_post'); ?>')
.then(response => response.json())
.then(data => {
document.getElementById('wpys-random-post').innerHTML = data.title;
});
});
// Загрузка при первой загрузке страницы
document.getElementById('wpys-load-post').click();
</script>
<?php
return ob_get_clean();
}
add_shortcode('wpys_random_post', 'wordpressy_random_post_shortcode');
function wordpressy_get_random_post_ajax() {
$random_post = get_posts(array('numberposts' => 1, 'orderby' => 'rand'));
if (!empty($random_post)) {
wp_send_json(array('title' => esc_html($random_post[0]->post_title)));
} else {
wp_send_json(array('title' => 'Посты не найдены'));
}
}
add_action('wp_ajax_wpys_get_random_post', 'wordpressy_get_random_post_ajax');
add_action('wp_ajax_nopriv_wpys_get_random_post', 'wordpressy_get_random_post_ajax');Этот пример показывает, как интегрировать JavaScript fetch API и WordPress AJAX для динамического вывода данных.
Популярные плагины для работы с шорткодами и расширением функционала
Для тех, кто хочет упростить создание и управление шорткодами, существуют готовые решения:
- Shortcodes Ultimate — большой набор готовых шорткодов с визуальным редактором;
- WPGPT от WPSHOP — плагин для создания шорткодов с интеграцией GPT-3 и автоматическим генератором контента;
- Clearfy Pro — плагин для оптимизации и расширения функционала, который также позволяет создавать кастомные шорткоды;
- ABC Pagination — для создания пагинации через шорткоды;
- WPRemark — шорткоды для отзывов и рейтингов.
Используйте эти инструменты, если хотите быстро внедрять сложные элементы на сайт без программирования.
Рекомендации по безопасности и производительности при работе с шорткодами
При создании шорткодов важно соблюдать несколько правил:
- Всегда экранируйте пользовательские данные с помощью
esc_html(),esc_url()или других функций безопасности WordPress; - Не вставляйте необработанный HTML из внешних источников, чтобы избежать XSS-уязвимостей;
- Минимизируйте использование тяжелых запросов и кешируйте результаты, если данные не меняются часто;
- Тестируйте шорткоды на совместимость с темой и другими плагинами, чтобы избежать конфликтов.
Например, для кеширования результата шорткода можно использовать транзиенты:
function wordpressy_cached_shortcode() {
$cache = get_transient('wpys_cached_content');
if ($cache !== false) {
return $cache;
}
$output = 'Дорогие данные или запрос к API';
set_transient('wpys_cached_content', $output, 3600); // Кеш на час
return $output;
}
add_shortcode('wpys_cached', 'wordpressy_cached_shortcode');