Автоматическое отключение неиспользуемых шорткодов в WordPress

В 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. Это позволит держать код чистым, ускорить обработку страниц и повысить стабильность сайта.

Как создать nestable список в WordPress с помощью плагинов и кода
01.11.2025
Автоматическое создание отчёта об ошибках в WordPress
12.12.2025
Как отключить или полностью удалить редактор Gutenberg в WordPress
13.01.2026
Автоматическое закрытие открытых тикетов поддержки в WordPress
22.02.2026
WooCommerce: автоматическое удаление неоплаченных заказов через 24 часа
01.06.2026