Shortcode в WordPress — это мощный инструмент, который позволяет вставлять динамический контент в записи, страницы и виджеты с помощью простых тегов. В этой статье мы подробно разберём, как создать собственный shortcode для вывода данных на сайте, используя лучшие практики и примеры кода.
Что такое shortcode и зачем он нужен в WordPress
Shortcode — это своего рода сокращённый код, который заменяется на определённый функционал при отображении страницы. Это позволяет легко внедрять сложные элементы, такие как формы, списки, таблицы и другие динамические блоки, без необходимости писать HTML или PHP в редакторе. Например, вместо длинного кода можно просто написать [wpdo_custom], и WordPress подставит нужный контент.
Использование shortcode упрощает работу редакторов и контент-менеджеров, а также помогает разработчикам централизованно управлять выводом данных. При этом shortcode можно использовать многократно и с параметрами для гибкой настройки.
Давайте рассмотрим, как создать такой shortcode на примере вывода списка последних записей из определённой категории.
Создание простого shortcode для вывода последних записей
Начнём с базового примера. В файле плагина или темы добавим следующий код:
function wpdo_recent_posts_shortcode($atts) {
$atts = shortcode_atts(
array(
'category' => '',
'posts_per_page' => 5,
), $atts, 'wpdo_recent_posts'
);
$args = array(
'posts_per_page' => intval($atts['posts_per_page']),
'category_name' => sanitize_text_field($atts['category']),
'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('wpdo_recent_posts', 'wpdo_recent_posts_shortcode');Этот shortcode принимает два параметра: category — слаг категории, и posts_per_page — количество записей для вывода. Вызов в редакторе будет выглядеть так:
[wpdo_recent_posts category="novosti" posts_per_page="3"]
В результате на странице вы увидите упрощённый список из трёх последних записей категории «новости».
Добавляем поддержку атрибутов и безопасность данных
Важно всегда обрабатывать входящие параметры, чтобы избежать ошибок и уязвимостей. В нашем примере мы использовали функции shortcode_atts для установки значений по умолчанию, а также sanitize_text_field и intval для очистки данных.
Также стоит помнить о том, что при формировании HTML необходимо использовать функции экранирования, если вы выводите переменные напрямую. В нашем случае мы возвращаем готовый HTML, и поскольку данные берутся из функций WordPress, это достаточно безопасно.
Расширение функционала: добавление параметра сортировки
Чтобы сделать shortcode более универсальным, добавим возможность указывать порядок сортировки записей — по дате или по заголовку:
function wpdo_recent_posts_shortcode($atts) {
$atts = shortcode_atts(
array(
'category' => '',
'posts_per_page' => 5,
'orderby' => 'date', // date или title
'order' => 'DESC', // ASC или DESC
), $atts, 'wpdo_recent_posts'
);
$allowed_orderby = array('date', 'title');
$allowed_order = array('ASC', 'DESC');
$orderby = in_array($atts['orderby'], $allowed_orderby) ? $atts['orderby'] : 'date';
$order = in_array(strtoupper($atts['order']), $allowed_order) ? strtoupper($atts['order']) : 'DESC';
$args = array(
'posts_per_page' => intval($atts['posts_per_page']),
'category_name' => sanitize_text_field($atts['category']),
'post_status' => 'publish',
'orderby' => $orderby,
'order' => $order,
);
$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="'.esc_url(get_permalink()).'">'.esc_html(get_the_title()).'</a></li>';
}
wp_reset_postdata();
$output .= '</ul>';
return $output;
}
add_shortcode('wpdo_recent_posts', 'wpdo_recent_posts_shortcode');Пример использования с сортировкой по заголовку по возрастанию:
[wpdo_recent_posts category="blog" posts_per_page="10" orderby="title" order="ASC"]
Примеры популярных плагинов с shortcode и когда их использовать
Для расширения функционала вывода данных можно использовать готовые плагины с shortcode. Рассмотрим несколько популярных:
- Contact Form 7 — позволяет вставлять формы обратной связи через shortcode
[contact-form-7 id="123" title="Форма обратной связи"]. Отлично подходит для быстрого добавления форм. - WooCommerce — предоставляет множество shortcode для вывода товаров, категорий, корзины и оформления заказа. Например,
[products limit="4" columns="4"]выведет товары на страницу. - TablePress — удобный плагин для создания таблиц с выводом через shortcode
[table id=1 /]. Позволяет легко управлять табличными данными без кода.
Использование плагинов с shortcode помогает значительно сократить время разработки и повысить гибкость контента.
Отладка и тестирование shortcode на сайте
Чтобы убедиться, что shortcode работает корректно, нужно проверить несколько моментов:
- Выводится ли контент там, где ожидается.
- Правильность параметров и их обработка.
- Отсутствие ошибок PHP и предупреждений.
- Корректное отображение на разных устройствах.
Для отладки удобно использовать режим WP_DEBUG и логи ошибок. Также стоит проверять результат вызова shortcode в разных редакторах и шаблонах.
Если shortcode возвращает пустой результат, проверьте параметры, а также подключение, например, что хук add_shortcode вызывается в нужном месте — лучше всего в функции инициализации плагина или темы.
Итог: как использовать shortcode для динамического вывода данных на wpdo.ru
Shortcode — универсальный и мощный инструмент для вывода динамического контента в WordPress. Создавая собственные shortcode с использованием префикса wpdo, вы сможете легко добавлять на сайт списки записей, формы, таблицы и многое другое.
Обязательно обрабатывайте входные параметры, используйте функции безопасности WordPress и тестируйте работу shortcode в разных условиях. При необходимости можно комбинировать собственные решения с популярными плагинами, расширяя функционал сайта быстро и без лишних трудозатрат.