Шорткоды в WordPress позволяют внедрять функциональность в контент без необходимости редактировать шаблоны или использовать JavaScript. Это мощный инструмент, особенно при разработке тем и плагинов, когда необходимо упростить внедрение повторяющихся элементов.
Шорткод создаётся с помощью функции add_shortcode(), принимающей два аргумента: имя шорткода и колбэк-функцию. Например, чтобы вывести текущую дату, достаточно определить функцию и зарегистрировать её с помощью add_shortcode(‘date_today’, ‘callback_function’).
Важно учитывать обработку атрибутов шорткода. WordPress предоставляет функцию shortcode_atts(), которая задаёт значения по умолчанию и защищает от отсутствующих параметров. Это особенно актуально при создании многофункциональных шорткодов, например, галерей, таблиц или вставки пользовательского контента.
Шорткоды можно использовать как в записях и страницах, так и в виджетах и полях ACF. Для этого достаточно убедиться, что функция do_shortcode() вызывается в нужном месте шаблона, если автоматическая обработка не предусмотрена.
function my_simple_shortcode() {
return 'Пример простого шорткода.';
}
add_shortcode('simpletext', 'my_simple_shortcode');
Теперь можно использовать шорткод [simpletext]
в любом месте контента. WordPress автоматически подставит возвращаемое значение функции вместо шорткода при отображении страницы.
Не используйте зарезервированные имена шорткодов, такие как gallery
или embed
. Всегда выбирайте уникальное имя, чтобы избежать конфликтов с другими плагинами или темами.
Как передавать атрибуты в шорткод и обрабатывать значения
Атрибуты позволяют настраивать поведение шорткода без изменения кода. Для их обработки используется функция shortcode_atts()
, объединяющая значения по умолчанию с переданными пользователем.
Пример базового шорткода с обработкой атрибутов:
function custom_shortcode($atts) {
$atts = shortcode_atts([
'title' => 'Заголовок по умолчанию',
'count' => 5
], $atts, 'custom');
$title = sanitize_text_field($atts['title']);
$count = intval($atts['count']);
return "<h3>$title</h3><p>Количество: $count</p>";
}
add_shortcode('custom', 'custom_shortcode');
В этом примере:
title
иcount
– задаются как атрибуты.sanitize_text_field()
иintval()
– фильтруют значения для безопасности и корректности.
Использование шорткода в контенте:
[custom title="Новости" count="10"]
Если не указать атрибуты, будут использованы значения по умолчанию. Названия атрибутов чувствительны к регистру, поэтому рекомендуется использовать строчные буквы.
Для булевых атрибутов используйте явные значения:
[custom enabled="true"]
В обработчике следует привести строку к булевому типу:
$enabled = filter_var($atts['enabled'], FILTER_VALIDATE_BOOLEAN);
Шорткоды WordPress позволяют встраивать HTML и JavaScript, но требуют осторожности при работе с кавычками и безопасностью кода. Ниже описаны основные принципы встраивания HTML и JavaScript в шорткод через функцию add_shortcode()
.
- Кавычки в JavaScript и HTML экранируйте или используйте альтернативный синтаксис, чтобы избежать конфликтов с PHP.
- Внутри JavaScript избегайте использования
document.write()
. ПрименяйтеaddEventListener()
илиinnerHTML
.
Пример шорткода с HTML и JavaScript:
function my_custom_shortcode() {
ob_start();
?>
<div id="my-block">Нажмите кнопку ниже</div>
<button id="my-button">Изменить текст</button>
<script>
document.addEventListener("DOMContentLoaded", function() {
const btn = document.getElementById("my-button");
btn.addEventListener("click", function() {
document.getElementById("my-block").innerText = "Текст изменён!";
});
});
</script>
Для избежания конфликтов с редактором блоков (Gutenberg) и кешированием, размещайте скрипт через wp_enqueue_script()
и подключайте его условно, проверяя наличие шорткода в контенте:
function enqueue_my_shortcode_script() {
if (has_shortcode(get_post()->post_content, 'my_shortcode')) {
wp_enqueue_script('my-script', plugin_dir_url(__FILE__) . 'script.js', array(), null, true);
}
}
add_action('wp_enqueue_scripts', 'enqueue_my_shortcode_script');
Для передачи данных из PHP в JavaScript используйте wp_localize_script()
.
wp_localize_script('my-script', 'myData', array(
'message' => 'Привет из PHP'
));
JavaScript-файл:
document.addEventListener("DOMContentLoaded", function() {
alert(myData.message);
});
Избегайте вставки больших скриптов напрямую в HTML-шорткод – выносите логику в отдельные JS-файлы. Это упрощает отладку и повышает безопасность.
Как подключать стили и скрипты только при использовании шорткода
Чтобы не загружать лишние ресурсы на страницах, где шорткод не используется, регистрируйте скрипты и стили заранее, а подключайте их – в момент рендера шорткода.
-
Регистрируйте ресурсы в хуке
wp_enqueue_scripts
с флагомfalse
:function my_shortcode_register_assets() { wp_register_style('my-shortcode-style', plugin_dir_url(__FILE__) . 'assets/style.css'); wp_register_script('my-shortcode-script', plugin_dir_url(__FILE__) . 'assets/script.js', array('jquery'), null, true); } add_action('wp_enqueue_scripts', 'my_shortcode_register_assets');
-
Создайте шорткод и подключайте ресурсы внутри его колбэка:
function my_custom_shortcode($atts) { wp_enqueue_style('my-shortcode-style'); wp_enqueue_script('my-shortcode-script'); ob_start(); ?> <div class="my-shortcode-wrapper"> Контент шорткода </div> <?php return ob_get_clean(); } add_shortcode('my_shortcode', 'my_custom_shortcode');
-
Проверьте, чтобы ресурсы не дублировались: используйте уникальные имена хендлеров и не подключайте одни и те же файлы в других местах темы или плагина.
-
Избегайте глобального подключения через
functions.php
, если стиль или скрипт специфичен для одного шорткода.
Такой подход снижает нагрузку на страницу, исключает ненужные запросы и повышает производительность.
Добавьте следующий код в файл functions.php активной темы или в собственный плагин:
function my_custom_db_shortcode() {
global $wpdb;
$results = $wpdb->get_results(
"SELECT post_title, ID FROM {$wpdb->prefix}posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY post_date DESC LIMIT 5"
);
if (empty($results)) {
return '<p>Нет записей для отображения.</p>';
}
$output = '<ul>';
foreach ($results as $post) {
$url = get_permalink($post->ID);
$title = esc_html($post->post_title);
$output .= "<li><a href='{$url}'>{$title}</a></li>";
}
$output .= '</ul>';
return $output;
}
add_shortcode('latest_posts', 'my_custom_db_shortcode');
$results = $wpdb->get_results(
"SELECT meta_value FROM {$wpdb->prefix}postmeta WHERE meta_key = 'custom_field' LIMIT 10"
);
Как использовать вложенные шорткоды и обрабатывать вложенный контент
Для работы с вложенными шорткодами в WordPress важно правильно организовать логику обработки вложенного контента. По умолчанию WordPress поддерживает обработку вложенных шорткодов, но для этого необходимо учитывать несколько аспектов при создании шорткода.
Прежде чем приступить к обработке вложенных шорткодов, нужно определить, как именно шорткод будет обрабатывать внутреннее содержимое. Для этого в функции шорткода можно использовать параметр $content
, который хранит текст между открывающим и закрывающим тегами шорткода.
Пример шорткода, который позволяет вставлять вложенные шорткоды:
function my_nested_shortcode($atts, $content = null) { // Очистка вложенного контента $content = do_shortcode($content); kotlinEdit// Ваш код обработки контента return '' . $content . ''; } add_shortcode('my_shortcode', 'my_nested_shortcode');
В этом примере шорткод [my_shortcode]
может содержать другие шорткоды внутри. Используя функцию do_shortcode($content)
, мы заставляем WordPress обработать вложенные шорткоды, прежде чем возвращать окончательный результат.
Если необходимо обрабатывать контент с дополнительной логикой, можно использовать условия в коде шорткода. Например, добавление вложенных шорткодов только в случае, если в контенте встречается определенный тег:
function my_custom_shortcode($atts, $content = null) { // Проверка наличия вложенного шорткода if (has_shortcode($content, 'nested_shortcode')) { // Обработка вложенных шорткодов $content = do_shortcode($content); } bashEditreturn '' . $content . ''; } add_shortcode('my_custom_shortcode', 'my_custom_shortcode');
При работе с вложенными шорткодами важно помнить, что если внешний шорткод не вызывает вложенные шорткоды должным образом, это может привести к неправильному отображению контента. Использование функции do_shortcode
в нужных местах и правильное управление вложенными контентами позволяют избежать подобных проблем.
Как ограничить использование шорткода по ролям пользователей
Для ограничения доступа к шорткоду в WordPress по ролям пользователей можно использовать функцию current_user_can()
, которая проверяет, имеет ли текущий пользователь необходимую роль. Это поможет задать точные условия для отображения контента, зависящего от прав пользователя.
Пример шорткода, доступного только администраторам:
function restricted_shortcode() {
if (current_user_can('administrator')) {
return 'Доступно только администраторам.';
} else {
return 'У вас нет прав для просмотра этого контента.';
}
}
add_shortcode('restricted', 'restricted_shortcode');
Для более гибкой настройки можно создать шорткод, который будет доступен для нескольких ролей:
function role_based_shortcode() {
if (current_user_can('editor') || current_user_can('administrator')) {
return 'Доступно редакторам и администраторам.';
} else {
return 'У вас нет прав для просмотра этого контента.';
}
}
add_shortcode('role_based', 'role_based_shortcode');
Этот шорткод будет доступен как редакторам, так и администраторам, а для других пользователей будет выведено сообщение о запрете доступа.
Можно также проверять наличие нескольких ролей с помощью логического оператора &&
(и) или ||
(или) для создания более сложных условий доступа.
Для роли пользователя можно использовать дополнительные функции, такие как get_userdata()
для получения данных о пользователе, включая его роль. Это позволяет создавать динамичные условия доступа, которые зависят от пользовательских метаданных.
function custom_role_shortcode() {
$user = wp_get_current_user();
if (in_array('subscriber', (array) $user->roles)) {
return 'Доступно только подписчикам.';
} else {
return 'У вас нет прав для просмотра этого контента.';
}
}
add_shortcode('custom_role', 'custom_role_shortcode');
Вопрос-ответ:
Что такое шорткод в WordPress и для чего он используется?
Шорткод в WordPress — это специальный код, который позволяет вставлять динамический контент в страницы или записи без необходимости писать сложные PHP-скрипты. Он представляет собой короткую строку, заключенную в квадратные скобки, например, [example_shortcode]. Шорткоды часто используются для вставки галерей, видео, форм и других элементов, которые требуют использования PHP, но без необходимости напрямую вмешиваться в код сайта.