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

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

Что такое неиспользуемые шорткоды и почему их стоит удалять

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

Причины удалить неиспользуемые шорткоды:

  • Избежать вывода необработанных коротких кодов вида [example_shortcode] на страницах.
  • Оптимизировать работу сайта, снизить нагрузку на парсинг контента.
  • Снизить риски безопасности — старые шорткоды могут содержать уязвимости.
  • Упростить администрирование и поддержку сайта.

Как найти неиспользуемые шорткоды в WordPress

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

Получение списка зарегистрированных шорткодов

WordPress хранит шорткоды в глобальном массиве $shortcode_tags. Чтобы получить все зарегистрированные шорткоды, используем следующий код:

function wpaction_get_registered_shortcodes() {
    global $shortcode_tags;
    return array_keys($shortcode_tags);
}

$registered_shortcodes = wpaction_get_registered_shortcodes();
var_dump($registered_shortcodes);

Этот список покажет все шорткоды, которые в данный момент доступны на сайте.

Поиск шорткодов в контенте базы данных

Чтобы понять, какие шорткоды реально используются, нужно просканировать содержимое записей, страниц и других типов записей. В WordPress контент хранится в таблице wp_posts в поле post_content.

Пример SQL-запроса для поиска конкретного шорткода [example_shortcode]:

SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%[example_shortcode%';

Чтобы автоматизировать поиск всех шорткодов из списка, можно использовать PHP-скрипт, который перебирает записи и проверяет вхождение каждого шорткода:

function wpaction_find_used_shortcodes($shortcodes) {
    global $wpdb;
    $used = [];
    foreach ($shortcodes as $shortcode) {
        $pattern = '%\[' . $wpdb->esc_like($shortcode) . '%';
        $query = $wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE %s LIMIT 1", $pattern);
        $post_id = $wpdb->get_var($query);
        if ($post_id) {
            $used[] = $shortcode;
        }
    }
    return $used;
}

$registered = wpaction_get_registered_shortcodes();
$used_shortcodes = wpaction_find_used_shortcodes($registered);
var_dump($used_shortcodes);

Этот код возвращает массив шорткодов, которые реально встречаются в контенте.

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

Шорткоды, которые не используются, можно удалить из реестра шорткодов WordPress, чтобы они не обрабатывались и не вызывали ошибок.

Это делается с помощью функции remove_shortcode(). Для автоматизации можно написать функцию, которая будет удалять все неиспользуемые шорткоды:

function wpaction_remove_unused_shortcodes() {
    $registered = wpaction_get_registered_shortcodes();
    $used = wpaction_find_used_shortcodes($registered);
    $unused = array_diff($registered, $used);

    foreach ($unused as $shortcode) {
        remove_shortcode($shortcode);
    }
    return $unused;
}

add_action('init', function() {
    $removed = wpaction_remove_unused_shortcodes();
    if (!empty($removed)) {
        error_log('Removed unused shortcodes: ' . implode(', ', $removed));
    }
});

Этот код удалит из обработки все шорткоды, которые не используются в контенте, и запишет в лог список удалённых.

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

Если в базе остались записи с устаревшими шорткодами, их можно очистить, чтобы не выводить некорректный текст на страницах. Для этого подойдёт функция wpaction_strip_unused_shortcodes_from_content(), которая удалит из контента все неиспользуемые шорткоды вместе с их параметрами.

function wpaction_strip_unused_shortcodes_from_content($content) {
    global $shortcode_tags;
    $registered = array_keys($shortcode_tags);
    $used = wpaction_find_used_shortcodes($registered);
    $unused = array_diff($registered, $used);

    foreach ($unused as $shortcode) {
        // Регулярное выражение для поиска шорткода с параметрами и вложенным контентом
        $pattern = '\\[' . preg_quote($shortcode, '/') . '(\s[^\\]]*)?\\](.*?)\\[\\/' . preg_quote($shortcode, '/') . '\\]';
        $content = preg_replace('/' . $pattern . '/s', '', $content);
        // Также удаляем одиночные шорткоды без закрывающего тега
        $pattern_single = '\\[' . preg_quote($shortcode, '/') . '(\s[^\\]]*)?\\/\\]';
        $content = preg_replace('/' . $pattern_single . '/', '', $content);
    }
    return $content;
}

add_filter('the_content', 'wpaction_strip_unused_shortcodes_from_content', 20);

Этот фильтр автоматически очистит вывод контента от неиспользуемых шорткодов.

Полезные плагины для работы с шорткодами

Если вы хотите использовать готовые решения для управления шорткодами, обратите внимание на следующие плагины:

  • Shortcode Cleaner Lite — простой плагин для удаления неработающих шорткодов из контента.
  • Shortcode UI — позволяет просматривать и управлять шорткодами, упрощает их использование.
  • Clearfy Pro с модулями оптимизации — помогает удалять неиспользуемые функции, в том числе шорткоды, ускоряя сайт. Подробнее на wpshop.ru/clearfy-pro.

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

Для эффективного управления шорткодами придерживайтесь следующих правил:

  • Регулярно проверяйте контент на наличие устаревших шорткодов, особенно после удаления плагинов и смены тем.
  • Автоматизируйте очистку с помощью созданных функций или плагинов, чтобы избежать ошибок в выводе.
  • Перед удалением шорткодов из реестра убедитесь, что они действительно не используются, чтобы не сломать функционал.
  • Храните резервные копии базы данных перед массовыми изменениями контента.
  • Используйте логи для контроля удалённых шорткодов и быстрого реагирования на возможные проблемы.

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

Как автоматизировать создание резервных копий WordPress без плагинов
01.02.2026
Как добавить собственные поля в WordPress без плагинов
11.11.2025
Как добавить настройки для плагинов в WordPress с примерами кода
22.02.2026
Как добавить дополнительные мета-поля в административную панель WordPress
22.12.2025
Удаление старых ревизий записей в WordPress для оптимизации базы данных
10.02.2026