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

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

Почему важно удалять неиспользуемые шорткоды? Оптимизация и поддержка

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

  • Увеличение размера базы данных из-за хранения устаревших метаданных и кода.
  • Ошибки отображения, если плагин или тема со шорткодом удалены, а код остался в записях.
  • Затруднения при редактировании контента — устаревшие шорткоды путают авторов и вызывают лишние вопросы.
  • Замедление работы сайта, если шорткоды обрабатываются, но не приносят пользы.

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

Как определить, какие шорткоды не используются?

Для начала нужно получить список всех зарегистрированных шорткодов на сайте. Это можно сделать через глобальную переменную $shortcode_tags, которая содержит все шорткоды, зарегистрированные через add_shortcode().

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

Пример функции, которая возвращает массив всех зарегистрированных шорткодов:

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

Далее нужно проверить контент на наличие каждого шорткода. Это делается через поиск по базе данных по шаблону \[shortcode_name.

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

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

Пример функции, которая находит записи с указанным шорткодом и удаляет его:

function wpaddons_remove_shortcode_from_content($shortcode) {
    global $wpdb;
    $like = '%[' . $wpdb->esc_like($shortcode) . '%';
    $posts = $wpdb->get_results($wpdb->prepare(
        "SELECT ID, post_content FROM {$wpdb->posts} WHERE post_content LIKE %s AND post_status IN ('publish','draft','pending')",
        $like
    ));

    foreach ($posts as $post) {
        $pattern = get_shortcode_regex(array($shortcode));
        $new_content = preg_replace('/' . $pattern . '/s', '', $post->post_content);

        if ($new_content !== $post->post_content) {
            wp_update_post(array(
                'ID' => $post->ID,
                'post_content' => $new_content
            ));
        }
    }
}

Эта функция использует get_shortcode_regex() для точного удаления шорткода, включая вложенный контент, если он есть.

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

Ниже пример, который можно запускать вручную через админку или по крону. Он проверяет зарегистрированные шорткоды, ищет их в контенте и удаляет те, которые не зарегистрированы (то есть не используются):

function wpaddons_cleanup_unused_shortcodes() {
    global $wpdb, $shortcode_tags;

    // Получаем все зарегистрированные шорткоды
    $registered = array_keys($shortcode_tags);

    // Получаем список всех шорткодов, которые встречаются в базе (через LIKE)
    $query = "SELECT DISTINCT
    SUBSTRING_INDEX(SUBSTRING_INDEX(post_content, '[', -1), ']', 1) as shortcode_fragment
    FROM {$wpdb->posts}
    WHERE post_content LIKE '%[%]%' AND post_status IN ('publish','draft','pending')";

    $results = $wpdb->get_col($query);
    $all_found = array();

    // Извлекаем имена шорткодов из фрагментов
    foreach ($results as $fragment) {
        if (preg_match('/^([a-zA-Z0-9_-]+)/', $fragment, $matches)) {
            $all_found[] = $matches[1];
        }
    }

    $all_found = array_unique($all_found);

    // Находим не зарегистрированные шорткоды — потенциально неиспользуемые
    $unused = array_diff($all_found, $registered);

    if (empty($unused)) {
        return 'Unused shortcodes not found';
    }

    foreach ($unused as $shortcode) {
        wpaddons_remove_shortcode_from_content($shortcode);
    }

    return 'Removed unused shortcodes: ' . implode(', ', $unused);
}

Эту функцию можно вызвать из админки или через AJAX для удобства. Чистка позволит избавиться от битых шорткодов и мусора.

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

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

  • Shortcode Cleaner Lite — автоматическое удаление неработающих и неиспользуемых шорткодов.
  • Shortcode UI — управление шорткодами с визуальным интерфейсом.

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

Советы по безопасности и резервному копированию перед удалением

Перед массовой очисткой контента обязательно сделайте резервную копию базы данных. Любые автоматические изменения контента могут привести к потере данных или ошибкам. Используйте плагин для резервного копирования, например, WP Backup.

Также рекомендуется запускать удаление сначала на копии сайта или в тестовой среде. После проверки результата можно применять изменения на живом сайте.

Выводы и рекомендации по автоматизации

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

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

Автоматическое создание и удаление записей в WordPress по расписанию
30.03.2026
Как создать автоматический канонический URL в WordPress
25.01.2026
WooCommerce: автоматическое отключение плагинов по условиям корзины
01.06.2026
WooCommerce: автоматическое изменение стоимости товаров по акции
11.05.2026
Как создать nestable меню в WordPress: плагины и пример кода
11.11.2025