Шорткоды — это мощный инструмент WordPress для вставки динамического и повторно используемого контента в записи, страницы и виджеты. Они позволяют разработчикам и администраторам сайтов создавать короткие текстовые метки, которые автоматически заменяются на сложный HTML, PHP или другие элементы. В этой статье мы подробно рассмотрим, как создавать и использовать шорткоды для динамического контента, а также приведём примеры кода и полезные рекомендации.
Что такое шорткоды и зачем они нужны в WordPress
Шорткод — это специальный тег, заключённый в квадратные скобки, например, [my_shortcode]. При выводе страницы WordPress заменяет этот тег на содержимое, которое определено в функции обработчике шорткода. Это удобно, так как позволяет вставлять сложный функционал без необходимости писать код в редакторе.
Динамический контент — это данные, которые меняются в зависимости от условий, например, текущая дата, список последних записей, пользовательские поля, результаты запросов к базе данных и т.д. Использование шорткодов для динамического контента позволяет легко обновлять и поддерживать информацию на сайте.
Например, шорткод [recent_posts] может выводить список последних записей, а [user_info] — данные о текущем пользователе.
Создание простого шорткода с динамическим выводом
Давайте создадим базовый шорткод, который выводит приветствие пользователю с указанием текущей даты. Для этого добавим следующий код в файл functions.php вашей темы или в собственный плагин:
function wpbest_hello_user_shortcode() {
$current_user = wp_get_current_user();
$date = date_i18n('j F Y');
if ($current_user->exists()) {
return 'Привет, ' . esc_html($current_user->display_name) . '! Сегодня ' . $date;
} else {
return 'Привет, гость! Сегодня ' . $date;
}
}
add_shortcode('hello_user', 'wpbest_hello_user_shortcode');Этот шорткод [hello_user] выведет на страницу приветствие для залогиненного пользователя с его именем и текущей датой, а для гостей — универсальное приветствие.
Разбор кода
wp_get_current_user()— получает объект текущего пользователя.date_i18n()— функция WordPress для вывода даты с учётом локализации.- Функция возвращает строку с приветствием, которая и подставляется вместо шорткода.
Шорткод с атрибутами: вывод последних записей
Часто шорткоды требуют параметров, чтобы управлять выводом. Создадим шорткод [wpbest_recent_posts count="5" category="news"], который выводит список последних записей из указанной категории и в указанном количестве.
function wpbest_recent_posts_shortcode($atts) {
$atts = shortcode_atts(
array(
'count' => 3,
'category' => ''
), $atts, 'wpbest_recent_posts'
);
$args = array(
'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 'Записи не найдены.';
}
$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('wpbest_recent_posts', 'wpbest_recent_posts_shortcode');Теперь вы можете вставлять в контент шорткод, управляя параметрами:
[wpbest_recent_posts count="5" category="technology"]— выведет 5 последних записей из категории «technology».[wpbest_recent_posts]— выведет 3 последних записи (по умолчанию).
Советы по безопасности и производительности
Обязательно используйте функции esc_html(), esc_url() и sanitize_text_field() для очистки данных, чтобы избежать XSS-уязвимостей.
Для снижения нагрузки на сервер в шорткодах с запросами к базе данных рекомендуется использовать кэширование результата через Transients API или сторонние плагины.
Расширенные возможности: вложенные шорткоды и AJAX
Иногда нужно, чтобы шорткоды взаимодействовали друг с другом или динамически подгружали данные без перезагрузки страницы. Рассмотрим пример использования AJAX для вывода списка комментариев к посту по шорткоду.
1. Создаём шорткод с кнопкой для загрузки комментариев:
function wpbest_load_comments_shortcode($atts) {
$atts = shortcode_atts(array('post_id' => 0), $atts, 'wpbest_load_comments');
if (!$atts['post_id']) return 'ID поста не указан.';
wp_enqueue_script('wpbest-comments-ajax', get_stylesheet_directory_uri() . '/js/wpbest-comments.js', array('jquery'), null, true);
wp_localize_script('wpbest-comments-ajax', 'wpbestAjax', array(
'ajaxurl' => admin_url('admin-ajax.php'),
'post_id' => intval($atts['post_id'])
));
return '<button id="wpbest-load-comments" data-post_id="' . intval($atts['post_id']) . '">Показать комментарии</button><div id="wpbest-comments-container"></div>';
}
add_shortcode('wpbest_load_comments', 'wpbest_load_comments_shortcode');2. Создаём обработчик AJAX в functions.php:
function wpbest_ajax_load_comments() {
$post_id = intval($_POST['post_id']);
if (!$post_id) {
wp_send_json_error('Неверный ID поста');
}
$comments = get_comments(array('post_id' => $post_id, 'status' => 'approve'));
if (empty($comments)) {
wp_send_json_success('<p>Комментариев нет.</p>');
}
ob_start();
echo '<ul>';
foreach ($comments as $comment) {
echo '<li>' . esc_html($comment->comment_author) . ': ' . esc_html($comment->comment_content) . '</li>';
}
echo '</ul>';
$html = ob_get_clean();
wp_send_json_success($html);
}
add_action('wp_ajax_wpbest_load_comments', 'wpbest_ajax_load_comments');
add_action('wp_ajax_nopriv_wpbest_load_comments', 'wpbest_ajax_load_comments');3. JS-файл wpbest-comments.js для отправки AJAX-запроса:
jQuery(document).ready(function($) {
$('#wpbest-load-comments').on('click', function() {
var post_id = $(this).data('post_id');
$.post(wpbestAjax.ajaxurl, {
action: 'wpbest_load_comments',
post_id: post_id
}, function(response) {
if (response.success) {
$('#wpbest-comments-container').html(response.data);
} else {
alert('Ошибка загрузки комментариев');
}
});
});
});Лучшие плагины для работы с шорткодами и динамическим контентом
Для расширения возможностей шорткодов и упрощения их создания можно использовать готовые плагины:
- Shortcoder — позволяет создавать собственные шорткоды с HTML, JavaScript и PHP без программирования.
- WPGPT (https://wpshop.ru/plugins/wpgpt/?utm_source=wpbest.ru&utm_medium=article&utm_campaign=kak-ispolzovat-shortkody-dlya-dinamicheskogo-kontenta-v-wordpress) — интеграция с GPT для генерации контента через шорткоды.
- Clearfy Pro — оптимизация и управление функционалом сайта, включая расширенные возможности шорткодов.
Использование таких плагинов сокращает время разработки и позволяет создавать уникальный динамический контент без глубоких знаний программирования.
Практические рекомендации по организации шорткодов на сайте
Чтобы шорткоды работали корректно и легко поддерживались, придерживайтесь следующих правил:
- Используйте префиксы в названиях функций и шорткодов (например,
wpbest_), чтобы избежать конфликтов с другими плагинами. - Очистка и валидация входных данных обязательны для безопасности.
- Кэшируйте результаты сложных запросов для уменьшения нагрузки.
- Документируйте шорткоды и их атрибуты, чтобы другие разработчики и контент-менеджеры понимали их назначение.
- Тестируйте шорткоды в разных условиях (залогиненный пользователь, гость, разные роли).