Как создать шорткод wordpress

Как создать шорткод wordpress

Шорткоды в 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-файлы. Это упрощает отладку и повышает безопасность.

Избегайте вставки больших скриптов напрямую в HTML-шорткод – выносите логику в отдельные JS-файлы. Это упрощает отладку и повышает безопасность.

Как подключать стили и скрипты только при использовании шорткода

Как подключать стили и скрипты только при использовании шорткода

Чтобы не загружать лишние ресурсы на страницах, где шорткод не используется, регистрируйте скрипты и стили заранее, а подключайте их – в момент рендера шорткода.

  1. Регистрируйте ресурсы в хуке 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');
  2. Создайте шорткод и подключайте ресурсы внутри его колбэка:

    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');
  3. Проверьте, чтобы ресурсы не дублировались: используйте уникальные имена хендлеров и не подключайте одни и те же файлы в других местах темы или плагина.

  4. Избегайте глобального подключения через 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 обработать вложенные шорткоды, прежде чем возвращать окончательный результат.

В этом примере шорткод undefined[my_shortcode]</code> может содержать другие шорткоды внутри. Используя функцию <code>do_shortcode($content)</code>, мы заставляем 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, но без необходимости напрямую вмешиваться в код сайта.

Ссылка на основную публикацию