Шорткоды в WordPress — это мощный инструмент для вставки динамического контента в записи, страницы и виджеты. Однако бывают ситуации, когда необходимо изменить поведение шорткода, либо полностью удалить его из системы без удаления плагина или темы, где он был зарегистрирован. В этой статье мы подробно рассмотрим, как удалить или изменить метод вызова шорткода в WordPress, чтобы решить конкретные задачи оптимизации и кастомизации.
Что такое шорткод и зачем менять метод его вызова
Шорткод — это специальный тег в квадратных скобках, например, [example_shortcode], который WordPress обрабатывает и заменяет на динамически сформированный HTML или другой контент. Шорткоды регистрируются функцией add_shortcode().
Иногда возникают задачи:
- Удалить шорткод, который конфликтует с другими элементами сайта.
- Изменить поведение существующего шорткода без удаления плагина.
- Временно отключить шорткод для тестирования.
- Заменить шорткод на другой или изменить его вывод.
Для этого нужно уметь работать с функциями WordPress для управления шорткодами.
Удаление шорткода в WordPress: remove_shortcode
WordPress позволяет удалить регистрацию шорткода с помощью функции remove_shortcode(). Эта функция принимает имя шорткода и отключает его обработку. Пример:
function clearfy_remove_example_shortcode() {
remove_shortcode('example_shortcode');
}
add_action('init', 'clearfy_remove_example_shortcode');
Важный момент — вызов remove_shortcode() должен быть после регистрации шорткода, обычно на хуке init или позднее.
Если вы не знаете, в каком плагине или теме зарегистрирован шорткод, можно проверить наличие с помощью функции shortcode_exists():
if (shortcode_exists('example_shortcode')) {
remove_shortcode('example_shortcode');
}
Это поможет избежать ошибок при попытке удалить несуществующий шорткод.
Изменение поведения шорткода: переопределение callback-функции
Иногда нужно не удалять шорткод, а изменить его вывод. Поскольку шорткод — это вызов функции, можно переопределить функцию-обработчик или зарегистрировать заново с новым callback.
Самый простой способ — удалить старую регистрацию и добавить новую:
function clearfy_override_example_shortcode($atts, $content = null) {
// Новый код обработки шорткода
return '<div class="custom-shortcode">Новый вывод</div>';
}
function clearfy_replace_shortcode() {
remove_shortcode('example_shortcode');
add_shortcode('example_shortcode', 'clearfy_override_example_shortcode');
}
add_action('init', 'clearfy_replace_shortcode');
Таким образом, вызов [example_shortcode] будет возвращать именно ваш новый HTML.
Пример изменения атрибутов шорткода
Часто шорткод принимает атрибуты, которые нужно обработать по-новому:
function clearfy_override_example_shortcode($atts, $content = null) {
$atts = shortcode_atts(array(
'color' => 'blue',
'text' => 'По умолчанию'
), $atts);
return '<span style="color: ' . esc_attr($atts['color']) . ';">' . esc_html($atts['text']) . '</span>';
}
Теперь при вызове [example_shortcode color="red" text="Привет"] будет выведен красный текст «Привет».
Удаление шорткодов из содержимого без отключения регистрации
В некоторых случаях необходимо оставить шорткод зарегистрированным, но убрать его обработку для определённых страниц или условий. Например, если шорткод вызывает тяжёлый скрипт, а на странице он не нужен.
Для этого можно использовать фильтр the_content и функцию clearfy_strip_shortcode():
function clearfy_strip_shortcode($content) {
if (is_page('contact')) { // условие, где отключаем шорткод
$pattern = get_shortcode_regex(array('example_shortcode'));
$content = preg_replace('/' . $pattern . '/s', '', $content);
}
return $content;
}
add_filter('the_content', 'clearfy_strip_shortcode', 20);
Этот код удалит из содержимого только шорткод example_shortcode на странице «contact».
Практические примеры с использованием плагина Clearfy Pro
Если вы используете плагин Clearfy Pro, в нём есть удобные функции для управления шорткодами и оптимизации сайта. Например, модуль оптимизации позволяет отключать лишние шорткоды, чтобы ускорить загрузку страниц без вмешательства в код.
В интерфейсе Clearfy Pro вы можете выбрать нежелательные шорткоды для отключения на всех или отдельных страницах, что идеально подходит для решения задач, описанных выше.
Советы по использованию и отладке шорткодов
При изменении методов вызова шорткодов учитывайте следующие моменты:
- Всегда тестируйте изменения на тестовом сайте, чтобы избежать ошибок в работе фронтенда.
- Используйте
remove_shortcode()иadd_shortcode()только на хуках после регистрации шорткода (обычноinitс приоритетом 10 или выше). - Если шорткод использует глобальные переменные или внешние ресурсы, убедитесь, что ваша новая функция-обработчик корректно их инициализирует.
- Для временного отключения шорткода можно использовать фильтр
the_contentи регулярные выражения, но этот метод менее производительный.
Дополнительный пример: отключение шорткода на мобильных устройствах
Можно комбинировать проверку user-agent и удаление шорткода только для мобильных пользователей:
function clearfy_conditional_remove_shortcode() {
if (wp_is_mobile()) {
remove_shortcode('example_shortcode');
}
}
add_action('init', 'clearfy_conditional_remove_shortcode');
Это помогает снизить нагрузку на мобильные устройства, отключая тяжелые элементы.