Шорткоды в WordPress — мощный инструмент для вставки динамического контента в записи и страницы. Однако часто возникает задача сделать шорткод, который можно обновлять и менять без необходимости редактировать код в файлах темы или плагина. В этой статье мы подробно разберём, как создать обновляемый шорткод, который хранит свои данные в базе и позволяет легко менять отображаемый контент.
Что такое обновляемый шорткод и зачем он нужен
Обычно шорткод — это функция, которая возвращает фиксированный или динамический HTML-код. Но если вы хотите, чтобы контент шорткода можно было менять через админку, без правки PHP, лучше сделать обновляемый шорткод. Это особенно полезно для блоков с часто меняющейся информацией — контактами, баннерами, акциями и пр.
Обновляемый шорткод хранит свои данные в базе WordPress, например, в опциях или в пользовательских настройках, и при вызове выводит актуальный контент. Управлять содержимым можно через специальную страницу в админке или через стандартные поля.
Создание обновляемого шорткода: пошаговый пример
Регистрация шорткода и функции вывода
Начнём с регистрации самого шорткода в файле functions.php темы или в вашем плагине. Назовём функцию wplangs_render_updatable_shortcode для уникальности.
function wplangs_render_updatable_shortcode($atts) {
$content = get_option('wplangs_shortcode_content', 'Здесь пока нет контента');
return '<div class="wplangs-shortcode">' . wp_kses_post($content) . '</div>';
}
add_shortcode('wplangs_updatable', 'wplangs_render_updatable_shortcode');В этом коде мы получаем опцию из базы с ключом wplangs_shortcode_content и выводим её. Если опция не задана, показываем заглушку.
Добавление страницы настроек в админку для редактирования контента
Чтобы управлять содержимым шорткода из админки, создадим страницу настроек с формой. Для этого зарегистрируем меню и обработаем сохранение.
function wplangs_add_shortcode_settings_page() {
add_menu_page(
'Настройки шорткода',
'Шорткод WPLangs',
'manage_options',
'wplangs_shortcode_settings',
'wplangs_shortcode_settings_page_html'
);
}
add_action('admin_menu', 'wplangs_add_shortcode_settings_page');
function wplangs_shortcode_settings_page_html() {
if (!current_user_can('manage_options')) {
return;
}
if (isset($_POST['wplangs_shortcode_content'])) {
check_admin_referer('wplangs_shortcode_save_nonce');
$content = wp_kses_post($_POST['wplangs_shortcode_content']);
update_option('wplangs_shortcode_content', $content);
echo '<div class="updated"><p>Настройки сохранены.</p></div>';
}
$content = get_option('wplangs_shortcode_content', '');
?>
<div class="wrap">
<h1>Настройки шорткода WPLangs</h1>
<form method="post" action="">
<?php wp_nonce_field('wplangs_shortcode_save_nonce'); ?>
<textarea name="wplangs_shortcode_content" rows="10" cols="50" class="large-text code"><?php echo esc_textarea($content); ?></textarea>
<p><input type="submit" class="button-primary" value="Сохранить"></p>
</form>
</div>
<?php
}Этот код добавит пункт меню в админке, где можно редактировать содержимое шорткода в поле textarea. Мы используем wp_kses_post для очистки HTML, чтобы предотвратить XSS.
Расширение функционала: передача параметров в шорткод
Часто нужно, чтобы шорткод мог принимать параметры, например, выбирать один из нескольких вариантов контента. Добавим атрибут id для выбора конкретного блока.
function wplangs_render_updatable_shortcode($atts) {
$atts = shortcode_atts(array(
'id' => 'default',
), $atts, 'wplangs_updatable');
$option_name = 'wplangs_shortcode_content_' . sanitize_key($atts['id']);
$content = get_option($option_name, 'Контент не найден');
return '<div class="wplangs-shortcode">' . wp_kses_post($content) . '</div>';
}Теперь для каждого id можно хранить отдельный текст. Для управления такими опциями понадобится более сложный интерфейс, например, с повторяющимися полями или таблицей.
Примеры полезных плагинов для работы с шорткодами и кастомизацией
Если вы хотите использовать готовые решения или расширить возможности, рекомендую обратить внимание на следующие плагины:
- Shortcoder — удобный плагин для создания и управления шорткодами с произвольным HTML/JS.
- Code Snippets — позволяет добавлять PHP-код (в том числе шорткоды) без правки файлов темы.
- Advanced Custom Fields (ACF) — для создания сложных форм управления данными, которые можно выводить через шорткоды.
С помощью этих инструментов можно быстро настроить и расширить функционал обновляемых шорткодом, не погружаясь глубоко в программирование.
Советы по безопасности и производительности при создании обновляемых шорткодов
При создании обновляемых шорткодов важно учитывать несколько моментов:
- Очистка данных. Всегда фильтруйте и проверяйте пользовательский ввод, используйте функции
wp_kses_post,sanitize_text_fieldи проверку nonce. - Кеширование. Если шорткод выводит сложный или тяжелый контент, имеет смысл кешировать результат с помощью transient API.
- Минимизация запросов к базе. Старайтесь не делать лишних запросов в цикле, используйте get_option с правильным ключом.
- Права доступа. Ограничьте доступ к редактированию настроек только администраторам или ролям с нужными правами.
Соблюдение этих рекомендаций поможет избежать проблем и сделать ваш шорткод надёжным и безопасным.
Вывод и использование шорткода на сайте
После настройки и сохранения контента через админку, используйте шорткод в публикациях и страницах так:
[wplangs_updatable]Или с параметром:
[wplangs_updatable id="promo"]Это позволит динамически менять содержимое без редактирования кода или темы. Такой подход значительно упрощает управление сайтом и делает его гибче.