mysurik.ru

Как создать кастомный шорткод в WordPress: пошаговое руководство

Введение: Почему шорткоды — неотъемлемая часть WordPress

Шорткоды в WordPress — это мощный инструмент, позволяющий упрощать создание сложного контента и повторно использовать код. Они превращают длинные конструкции PHP или HTML в компактные теги, которые можно вставлять прямо в редакторе постов или страниц. Это особенно полезно для разработчиков тем, плагинов или пользователей, которым нужно добавлять динамический контент без глубокого погружения в код.

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


Что такое шорткод и зачем он нужен

Шорткод — это специальный тег, который начинается с квадратных скобок, например [my_shortcode]. Когда WordPress обрабатывает контент, он заменяет такой тег на соответствующий HTML или PHP-код. Это позволяет:

  • Упрощать вставку сложного кода (например, форм, слайдеров, калькуляторов).
  • Создавать повторно используемые элементы (например, блоки с цитатами или уведомлениями).
  • Динамически выводить данные из базы данных или API.

Шорткоды могут принимать атрибуты, например [my_shortcode param1="value" param2="value"], что расширяет их функциональность и делает более гибкими.

Где используются шорткоды в WordPress

Шорткоды широко применяются в:

  • Плагинах: Например, плагин WooCommerce использует шорткоды для отображения товаров или корзины.
  • Темах: Многие темы предоставляют свои шорткоды для создания сложных блоков (например, [wp_pagenav]).
  • Кастомных решениях: Разработчики создают шорткоды для вывода пользовательских полей, интеграции с API или рендеринга графиков.

Они также могут использоваться в визуальных редакторах (например, Elementor, Gutenberg), где поддерживают drag-and-drop-интерфейс.


Как создать базовый шорткод: пошаговая инструкция

Создание шорткода включает два основных шага: регистрацию функции и определение её поведения. Давайте разберём процесс на примере простого шORTкода, который выводит приветственное сообщение.

Шаг 1: Регистрация шорткода с помощью add_shortcode()

Функция add_shortcode() связывает имя шорткода с callback-функцией, которая будет выполняться при его вызове. Она принимает два аргумента:

  • Имя шорткода (tag): Строка, например my_hello_world. Это то, что будет вставляться в контент.
  • Callback-функция: Функция, которая обрабатывает шорткод и возвращает HTML или другой контент.
function my_hello_world_shortcode() {
return '

Hello, World!

'; } add_shortcode('my_hello_world', 'my_hello_world_shortcode');

В этом примере шорткод [my_hello_world] будет заменён на абзац с текстом «Hello, World!».

Шаг 2: Определение callback-функции

Callback-функция может быть простой или сложной в зависимости от задач. Она должна возвращать строку (HTML, текст) или null, если шорткод не должен ничего выводить.

function my_hello_world_shortcode($atts) {
// Обработка атрибутов (если они есть)
$atts = shortcode_atts(array(
'name' => 'Guest',
'color' => '#000000'
), $atts);
return sprintf(
'

Hello, %s!

', esc_attr($atts['color']), esc_html($atts['name']) ); } add_shortcode('my_hello_world', 'my_hello_world_shortcode');

В этом расширенном примере шорткод принимает атрибуты name и color, что позволяет изменять вывод. Например, [my_hello_world name="Alice" color="#ff0000"] даст:

Hello, Alice!


Работа с атрибутами шорткода: примеры и лучшие практики

Атрибуты делают шорткоды более гибкими. Они позволяют передавать параметры в callback-функцию и изменять её поведение. Давайте рассмотрим, как правильно их обрабатывать.

Как получить атрибуты с помощью shortcode_atts()

Функция shortcode_atts() помогает:

  • Парсить переданные атрибуты из контента.
  • Устанавливать значения по умолчанию, если атрибут не указан.
  • Экранировать значения для безопасности (хотя это лучше делать отдельно).
function my_shortcode_with_atts($atts) {
// Устанавливаем значения по умолчанию
$atts = shortcode_atts(array(
'title' => 'Default Title',
'link'  => '#'
), $atts);
return sprintf(
'%s',
esc_url($atts['link']),
esc_html($atts['title'])
);
}
add_shortcode('my_button', 'my_shortcode_with_atts');

Пример использования: [my_button title="Click Me" link="https://example.com"].

Обработка атрибутов вручную (без shortcode_atts)

Если вам нужно больше контроля, можно парсить атрибуты вручную с помощью shortcode_parse_atts() (доступно с WordPress 5.0):

function my_manual_atts_shortcode($atts) {
$parsed_atts = shortcode_parse_atts($atts);
if (isset($parsed_atts['size'])) {
$size_class = 'btn-' . sanitize_key($parsed_atts['size']);
} else {
$size_class = '';
}
return sprintf(
'',
esc_attr($size_class)
);
}
add_shortcode('my_manual_button', 'my_manual_atts_shortcode');

Пример: [my_manual_button size="large"].


Создание сложных шорткодов с динамическим контентом

Шорткоды могут выводить данные из базы данных, API или других источников. Рассмотрим примеры таких реализаций.

Пример 1: Шорткод для вывода последних постов

function latest_posts_shortcode($atts) {
$atts = shortcode_atts(array(
'count' => 5,
'category' => ''
), $atts);
$args = array(
'posts_per_page' => $atts['count'],
'cat' => $atts['category']
);
$query = new WP_Query($args);
ob_start();
if ($query->have_posts()) {
echo '';
} else {
echo '

No posts found.

'; } wp_reset_postdata(); return ob_get_clean(); } add_shortcode('latest_posts', 'latest_posts_shortcode');

Использование: [latest_posts count="3" category="5"].

Пример 2: Интеграция с API (например, погода)

function weather_shortcode($atts) {
$atts = shortcode_atts(array(
'city' => 'London',
'units' => 'metric'
), $atts);
$api_url = sprintf('https://api.openweathermap.org/data/2.5/weather?q=%s&units=%s&appid=YOUR_API_KEY', urlencode($atts['city']), $atts['units']);
$response = wp_remote_get($api_url);
if (is_wp_error($response)) {
return '

Error fetching weather data.

'; } $body = json_decode(wp_remote_retrieve_body($response)); if ($body->cod !== 200) { return '

City not found.

'; } return sprintf( '
' . '

%s

' . '

Temperature: %d°C

' . '

Humidity: %d%%

' . '
', esc_html($body->name), (int)$body->main->temp, (int)$body->main->humidity ); } add_shortcode('weather', 'weather_shortcode');

Пример: [weather city="Moscow" units="metric"]. Не забудьте заменить YOUR_API_KEY на реальный ключ API.


Обработка ошибок и безопасность шорткодов

Безопасность — критически важна при работе с шорткодами, особенно если они принимают пользовательский ввод. Давайте рассмотрим основные меры предосторожности.

Экранирование данных: esc_*() функции

Все данные, которые выводятся на страницу, должны быть экранированы для защиты от XSS-атак. Основные функции:

  • esc_html(): Для HTML-контекста.
  • esc_attr(): Для атрибутов HTML.
  • esc_url(): Для URL.
function safe_shortcode($atts) {
$atts = shortcode_atts(array(
'user_input' => ''
), $atts);
return sprintf(
'

Your input: %s

', esc_html($atts['user_input']) ); } add_shortcode('safe_example', 'safe_shortcode');

Проверка атрибутов на валидность

Не всегда можно доверять переданным атрибутам. Например, проверяйте:

  • Тип данных (число, строка).
  • Разрешенные значения (например, для выпадающих списков).
function validated_shortcode($atts) {
$allowed_sizes = array('small', 'medium', 'large');
$default_size = 'medium';
if (isset($atts['size']) && in_array(sanitize_key($atts['size']), $allowed_sizes)) {
$size = sanitize_key($atts['size']);
} else {
$size = $default_size;
}
return sprintf(
'',
esc_attr($size)
);
}
add_shortcode('validated_button', 'validated_shortcode');

Интеграция шорткодов с Gutenberg и визуальными редакторами

Современные редакторы WordPress (Gutenberg) поддерживают шорткоды, но для лучшего пользовательского опыта можно создать кастомный блок на их основе.

Как добавить шORTкод в Gutenberg

Если вы используете плагин или тему с поддержкой Gutenberg, шорткоды будут автоматически отображаться как блоки. Однако для более сложных случаев можно:

  • Использовать register_block_type() для создания кастомного блока.
  • Создать плагин с поддержкой JavaScript для рендеринга шорткодов в редакторе.
// Пример регистрации блока (для сложных случаев)
function register_shortcode_block() {
register_block_type('my-plugin/shortcode-block', array(
'render_callback' => function($attrs, $content = '') {
return do_shortcode('[my_custom_shortcode]');
},
));
}
add_action('init', 'register_shortcode_block');

Плагины для упрощения работы с шорткодами

Если ручная работа кажется сложной, используйте плагины:

  • Shortcoder: Позволяет создавать и управлять шорткодами через интерфейс.
  • Code Snippets: Для безопасного добавления кода в WordPress без редактирования файлов темы.
  • Shortcodes Ultimate: Набор готовых и кастомных шорткодов.

Заключение: Практические рекомендации по созданию шорткодов

Создание кастомных шорткодов в WordPress — мощный инструмент, который позволяет расширять функциональность сайта без сложного программирования. Вот ключевые рекомендации:

  1. Начинайте с простого: Начните с базовых шорткодов (например, для вывода текста или изображений) и gradually move to more complex logic.
  2. Используйте обертки для кода: Обертывайте сложные логические блоки в функции, чтобы код был чистым и читаемым.
  3. Не forget about security: Always sanitize and validate user input to prevent vulnerabilities like XSS or SQL injection.
  4. Test your shortcodes: Test them in different contexts (Gutenberg, Classic Editor) and with various inputs to ensure compatibility.
  5. Document your shortcodes: Add comments or a documentation page explaining how to use each shortcode, including available attributes.
  6. Optimize for performance: Avoid heavy database queries or external API calls in shortcodes that render on every page load. Consider caching where possible.

Шорткоды — это не только инструмент для разработчиков, но и способ упростить работу для редакторов контента. Правильно реализованные шорткоды делают сайт более динамичным, гибким и удобным в управлении.

Если вам нужно создать сложный функционал (например, интерактивные формы или кастомные виджеты), шорткоды станут вашим надежным помощником. Начните практиковаться уже сегодня, и вы увидите, как это упростит работу с WordPress!

Удачи в создании своих первых кастомных шорткодов! 🚀

Ваш комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *