Шорткоды — это мощный инструмент WordPress, который позволяет легко вставлять динамический контент в страницы и записи. Однако стандартный шорткод часто ограничен статическим выводом. В этой статье мы подробно разберем, как создавать динамические шорткоды, которые могут принимать параметры, взаимодействовать с базой данных и выводить контент в зависимости от условий.
Что такое динамические шорткоды и зачем они нужны
Динамические шорткоды — это такие шорткоды, которые изменяют свое поведение в зависимости от переданных параметров или условий на сайте. Это удобно, когда нужно выводить похожий, но различающийся контент в разных местах без дублирования кода.
Например, можно создать шорткод, который выводит список последних записей из определенной категории, либо шорткод для отображения пользовательских данных, получаемых из базы или API.
Использование динамических шорткодов упрощает управление контентом и улучшает производительность, так как код централизован и легко редактируется.
Создание основного динамического шорткода в WordPress
Для создания шорткода в WordPress используется функция add_shortcode. Ее первый аргумент — это тег шорткода, второй — функция-обработчик.
Рассмотрим пример динамического шорткода, который выводит список последних записей из категории, переданной через параметр cat:
function wpcoding_get_latest_posts_shortcode($atts) {
$atts = shortcode_atts( array(
'cat' => '',
'count' => 5
), $atts, 'wpcoding_latest_posts' );
$args = array(
'posts_per_page' => intval($atts['count']),
'category_name' => sanitize_text_field($atts['cat']),
'post_status' => 'publish'
);
$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;
}
add_shortcode('wpcoding_latest_posts', 'wpcoding_get_latest_posts_shortcode');Теперь, добавив в запись [wpcoding_latest_posts cat="novosti" count="3"], вы получите список из 3 последних записей из категории «novosti».
Использование параметров шорткода для управления выводом
Параметры — ключевые элементы динамики. Вы можете передавать любые значения, которые будут влиять на вывод. Например, добавим параметр orderby для сортировки:
function wpcoding_get_latest_posts_shortcode($atts) {
$atts = shortcode_atts( array(
'cat' => '',
'count' => 5,
'orderby' => 'date'
), $atts, 'wpcoding_latest_posts' );
$args = array(
'posts_per_page' => intval($atts['count']),
'category_name' => sanitize_text_field($atts['cat']),
'orderby' => sanitize_text_field($atts['orderby']),
'post_status' => 'publish'
);
$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;
}Таким образом, можно делать шорткод гибким и удобным для различных нужд.
Примеры полезных динамических шорткодов
1. Вывод последних комментариев
Иногда нужно показать последние комментарии на сайте в любом месте. Создадим шорткод, который выводит последние комментарии с ссылками на посты:
function wpcoding_latest_comments_shortcode($atts) {
$atts = shortcode_atts(array(
'count' => 5
), $atts, 'wpcoding_latest_comments');
$comments = get_comments(array(
'number' => intval($atts['count']),
'status' => 'approve'
));
if(empty($comments)) {
return '<p>Комментариев нет.</p>';
}
$output = '<ul>';
foreach ($comments as $comment) {
$post_title = get_the_title($comment->comment_post_ID);
$post_link = get_permalink($comment->comment_post_ID) . '#comment-' . $comment->comment_ID;
$output .= '<li><a href="' . esc_url($post_link) . '">' . esc_html($comment->comment_author) . '</a> на "' . esc_html($post_title) . '"</li>';
}
$output .= '</ul>';
return $output;
}
add_shortcode('wpcoding_latest_comments', 'wpcoding_latest_comments_shortcode');Используйте [wpcoding_latest_comments count="3"] для вывода 3 последних комментариев.
2. Отображение произвольного поля (custom field)
Если на сайте используются метаполя, можно вывести их значение через шорткод. Например, шорткод для вывода произвольного поля по ID поста и ключу:
function wpcoding_custom_field_shortcode($atts) {
$atts = shortcode_atts(array(
'post_id' => get_the_ID(),
'key' => ''
), $atts, 'wpcoding_custom_field');
if(empty($atts['key'])) {
return '<p>Не указан ключ произвольного поля.</p>';
}
$value = get_post_meta(intval($atts['post_id']), sanitize_text_field($atts['key']), true);
if(empty($value)) {
return '<p>Значение не найдено.</p>';
}
return esc_html($value);
}
add_shortcode('wpcoding_custom_field', 'wpcoding_custom_field_shortcode');Пример использования: [wpcoding_custom_field key="price" post_id="123"]
Рекомендации по безопасности и производительности
При создании динамических шорткодов важно учитывать безопасность и оптимизацию.
- Всегда фильтруйте и экранируйте входящие данные: используйте
sanitize_text_field,intval,esc_htmlи другие функции. - Избегайте тяжелых запросов к базе данных в шорткодах — лучше кэшировать результаты.
- Используйте
wp_reset_postdata()при работе с WP_Query, чтобы не сломать глобальный цикл WordPress. - Если шорткод выводит HTML, убедитесь, что он валиден и безопасен для пользователя.
Полезные плагины для работы с шорткодами
Для расширения возможностей шорткодов и упрощения их создания можно использовать плагины:
- Shortcodes Ultimate — набор готовых шорткодов с возможностью кастомизации.
- Custom Content Shortcode — позволяет создавать свои шорткоды без программирования.
- Code Snippets — удобно вставлять и управлять пользовательским PHP-кодом, включая шорткоды.
Однако, если нужна полная гибкость — лучше писать свои шорткоды вручную, как показано выше.