Как добавить логику вызова шорткода в WordPress

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

Почему нужна логика вызова шорткода в WordPress

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

Добавив условные проверки, вы сможете:

  • Показывать контент только зарегистрированным пользователям или определённой роли.
  • Выводить блоки на определённых страницах, категориях или типах записей.
  • Управлять показом по времени, например, скрывать акции после окончания срока.
  • Создавать более гибкие и персонализированные страницы без множества шорткодов.

Рассмотрим несколько вариантов реализации на примерах.

Пример 1. Условный вывод шорткода по роли пользователя

Допустим, нужно вывести содержимое шорткода только для пользователей с ролью "подписчик" (subscriber) или выше.

function wplancer_conditional_shortcode_role($atts, $content = null) {
    if (!is_user_logged_in()) {
        return '';
    }
    $user = wp_get_current_user();
    $allowed_roles = array('subscriber', 'editor', 'administrator');
    if (array_intersect($allowed_roles, $user->roles)) {
        return do_shortcode($content);
    }
    return '';
}
add_shortcode('wplancer_role_content', 'wplancer_conditional_shortcode_role');

Этот шорткод используется так: [wplancer_role_content]Секретный контент для подписчиков[/wplancer_role_content]. Контент увидят только пользователи с указанными ролями. В противном случае ничего не выводится.

Объяснение кода

Сначала проверяем, вошёл ли пользователь в систему. Если нет — возвращаем пустую строку. Затем получаем объект текущего пользователя и проверяем, есть ли у него хотя бы одна из нужных ролей. Если условие верно — выполняем вложенные шорткоды и возвращаем содержимое. Иначе — ничего не выводим.

Пример 2. Вывод шорткода на определённых страницах или типах записей

Иногда нужно показывать контент только на конкретных страницах или в записях определённого типа (custom post type). Рассмотрим пример, когда шорткод выводится только на страницах с ID 42 и 55 и на записях типа "product".

function wplancer_conditional_shortcode_page($atts, $content = null) {
    if (is_page(array(42, 55)) || is_singular('product')) {
        return do_shortcode($content);
    }
    return '';
}
add_shortcode('wplancer_page_content', 'wplancer_conditional_shortcode_page');

Использование: [wplancer_page_content]Контент только для определённых страниц и продуктов[/wplancer_page_content].

Подробности

Функция is_page() принимает ID, название или слаг страницы. Если текущая страница совпадает, или это одиночный пост типа 'product', контент выводится. Иначе — скрывается.

Пример 3. Логика вызова шорткода по дате и времени

Чтобы, например, показать акцию только в определённые даты, используем проверку текущей даты.

function wplancer_conditional_shortcode_date($atts, $content = null) {
    $atts = shortcode_atts(array(
        'start' => '',
        'end' => '',
    ), $atts);

    $now = current_time('Y-m-d');
    if ($atts['start'] && $now < $atts['start']) {
        return '';
    }
    if ($atts['end'] && $now > $atts['end']) {
        return '';
    }
    return do_shortcode($content);
}
add_shortcode('wplancer_date_content', 'wplancer_conditional_shortcode_date');

Пример использования: [wplancer_date_content start="2024-06-01" end="2024-06-30"]Летняя акция![/wplancer_date_content]. Контент появится только в июне.

Использование плагинов для управления логикой шорткодов

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

Conditional Shortcodes

Плагин, добавляющий множество условных шорткодов для проверки ролей, статуса входа, даты, типа устройства и др. Например, [is_logged_in]...[/is_logged_in] выводит контент только для вошедших пользователей.

Shortcode Logic

Позволяет добавить PHP-условия к существующим шорткодам прямо в редакторе. Можно встроить if/else на лету без правки функций.

Clearfy Pro

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

Практические советы и рекомендации

  • Всегда проверяйте, что вложенный контент безопасен, особенно если используете do_shortcode() внутри ваших функций.
  • Для сложных условий лучше создавать отдельные функции с понятными именами, например, wplancer_check_user_role(), чтобы улучшить читаемость и поддержку кода.
  • Тестируйте шорткоды на разных страницах и ролях, чтобы убедиться, что условия работают корректно.
  • Используйте транзиенты или кеширование, если проверка условий требует сложных запросов, чтобы не замедлять сайт.

Заключение

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

Для удобства и расширения возможностей советуем обратить внимание на Clearfy Pro — мощный инструмент для оптимизации и управления функционалом WordPress.

Как автоматически очистить кеш и оптимизировать WooCommerce после обновления
18.06.2026
Как создать автоматическую оптимизацию изображений в WordPress
21.02.2026
Как добавить проверку и валидацию форм в WordPress
21.11.2025
Как добавить и менять атрибуты товара в WooCommerce через AJAX без перезагрузки страницы
26.04.2026
Как автоматически удалять зависшие сеансы пользователей в WordPress
18.07.2026