В WordPress шорткоды — мощный инструмент для добавления функционала и контента в записи, страницы и виджеты. Однако с течением времени в базе может накопиться множество неиспользуемых шорткодов, которые продолжают обрабатываться движком, что замедляет загрузку страниц и усложняет поддержку сайта. В этой статье расскажем, как найти и автоматически отключить неиспользуемые шорткоды в WordPress, используя практические решения с кодом и полезные плагины.
Почему важно отключать неиспользуемые шорткоды
Каждый зарегистрированный в WordPress шорткод обрабатывается функцией add_shortcode(). Если шорткод не используется в контенте, его регистрация становится лишней нагрузкой на систему, особенно на крупных сайтах с большим количеством записей. Отключение таких шорткодов помогает:
- Уменьшить потребление памяти и время обработки контента.
- Избавиться от конфликтов, если старые шорткоды вызывают ошибки.
- Сделать код сайта чище и проще для поддержки.
Также неиспользуемые шорткоды могут отображаться в виде текста на страницах, если плагин или тема, которая их добавляла, была удалена или отключена.
Как найти используемые и неиспользуемые шорткоды в WordPress
Анализ базы данных на наличие шорткодов
Первый шаг — найти все шорткоды, которые реально используются в контенте. Для этого можно выполнить SQL-запросы к таблицам wp_posts и wp_postmeta для поиска паттернов вида [shortcode].
Например, такой запрос ищет все шорткоды в записях:
SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(post_content, '[', -1), ']', 1) AS shortcode
FROM wp_posts
WHERE post_content LIKE '%[%]%'
AND post_status = 'publish';
Этот запрос выведет все встречающиеся шорткоды в опубликованных постах. Аналогично можно проверить и в метаданных.
Автоматизация поиска с помощью плагинов
Плагины как WPRemark помогают анализировать контент и выявлять неиспользуемые шорткоды, а также помогают управлять ими.
Как автоматически отключать неиспользуемые шорткоды с помощью кода
Пример функции для автоматического отключения
Далее рассмотрим пример функции, которая проверяет, используется ли шорткод в базе, и если нет — снимает его регистрацию. Для оптимизации проверки можно кешировать результаты.
function wptask_unregister_unused_shortcodes() {
global $shortcode_tags;
// Получаем все зарегистрированные шорткоды
$registered = array_keys($shortcode_tags);
$used_shortcodes = [];
global $wpdb;
foreach ($registered as $shortcode) {
// Ищем наличие шорткода в опубликованных постах
$like = '%[' . $shortcode;
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s AND post_status = 'publish'",
$like . '%'
));
if ($count > 0) {
$used_shortcodes[] = $shortcode;
} else {
// Если не найден — удаляем регистрацию
remove_shortcode($shortcode);
}
}
}
add_action('init', 'wptask_unregister_unused_shortcodes', 20);
Эта функция выполняется на хуке init с приоритетом 20, чтобы все шорткоды уже были зарегистрированы. Она перебирает все шорткоды, проверяет наличие в контенте и удаляет неиспользуемые.
Оптимизация кода с кешированием
Проверка по базе данных на каждом запросе — затратная операция, поэтому целесообразно кешировать результаты в транзиенте WordPress примерно на сутки:
function wptask_unregister_unused_shortcodes_cached() {
global $shortcode_tags;
$cache_key = 'wptask_used_shortcodes';
$used_shortcodes = get_transient($cache_key);
if (false === $used_shortcodes) {
$registered = array_keys($shortcode_tags);
$used_shortcodes = [];
global $wpdb;
foreach ($registered as $shortcode) {
$like = '%[' . $shortcode;
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s AND post_status = 'publish'",
$like . '%'
));
if ($count > 0) {
$used_shortcodes[] = $shortcode;
} else {
remove_shortcode($shortcode);
}
}
set_transient($cache_key, $used_shortcodes, DAY_IN_SECONDS);
} else {
// Если кеш есть, отключаем неиспользуемые шорткоды
$registered = array_keys($shortcode_tags);
foreach ($registered as $shortcode) {
if (!in_array($shortcode, $used_shortcodes)) {
remove_shortcode($shortcode);
}
}
}
}
add_action('init', 'wptask_unregister_unused_shortcodes_cached', 20);
Альтернативный способ: плагин Clearfy для управления шорткодами
Плагин Clearfy Pro содержит модуль оптимизации, который автоматически деактивирует неиспользуемые шорткоды без необходимости писать код. Он позволяет управлять регистрацией шорткодов и очищать базу от лишних обработчиков. Это удобный вариант для тех, кто не хочет вникать в программирование.
Тонкости и рекомендации при работе с шорткодами
Проверяйте зависимости и обратную совместимость
Перед отключением шорткода убедитесь, что он не используется в виджетах, настройках темы или сторонних плагинах. Иногда шорткоды могут генерироваться динамически или внедряться через конструкторы страниц.
Резервное копирование и тестирование
Перед внедрением автоматического отключения шорткодов сделайте резервную копию сайта и базы данных. Тестируйте изменения на тестовом сайте, чтобы избежать сбоев отображения контента.
Контроль и мониторинг
После отключения неиспользуемых шорткодов регулярно проверяйте сайт на наличие ошибок и некорректного отображения контента. Можно использовать инструменты отладки или логи сервера.
Выводы и практические советы
Автоматическое отключение неиспользуемых шорткодов — полезная практика для оптимизации производительности WordPress-сайтов. Используйте SQL-запросы для анализа, реализуйте автоматический код с кешированием, либо применяйте специализированные плагины, как Clearfy Pro или WPRemark. Это позволит держать код чистым, ускорить обработку страниц и повысить стабильность сайта.