Шорткоды в 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.