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

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

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

Со временем на сайте появляются шорткоды, которые перестали работать из-за удаления плагинов или изменения структуры сайта. Они остаются в записях, страницах или виджетах и выводятся как текст вида [old_shortcode], что портит внешний вид страниц и снижает качество контента. Кроме того, такие шорткоды:

  • Увеличивают объем базы данных и контента.
  • Могут вызывать конфликты с новыми плагинами.
  • Усложняют поддержку сайта.

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

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

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

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

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

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

// Выводим список в лог для отладки
error_log(print_r(wpacademy_get_registered_shortcodes(), true));

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

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

Чтобы найти шорткоды, которые реально используются, можно выполнить SQL-запросы по таблице wp_posts (или с вашим префиксом) с поиском по содержимому постов и страниц:

SELECT ID, post_title, post_content 
FROM wp_posts 
WHERE post_content LIKE '%[shortcode_name%'
AND post_status = 'publish';

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

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

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

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

function wpacademy_remove_unused_shortcodes($content) {
    global $shortcode_tags;

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

    // Шорткоды, которые мы хотим удалить (не зарегистрированные)
    preg_match_all('/\[(\w+)[^\]]*\]/', $content, $matches);
    $all_shortcodes_in_content = $matches[1];

    foreach ($all_shortcodes_in_content as $shortcode) {
        if (!in_array($shortcode, $registered)) {
            // Удаляем все вхождения шорткода
            $pattern = '/\[' . preg_quote($shortcode, '/') . '(\s[^\]]*)?\](?:.*?\[\/'. preg_quote($shortcode, '/') .'\])?/s';
            $content = preg_replace($pattern, '', $content);
        }
    }
    return $content;
}
add_filter('the_content', 'wpacademy_remove_unused_shortcodes', 20);

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

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

Для более радикального решения можно заменить или удалить шорткоды непосредственно в базе данных. Для этого рекомендуется сначала сделать бэкап базы. Затем можно использовать WP-CLI или написать PHP-скрипт:

PHP-скрипт для удаления шорткодов из постов

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

    $registered = array_keys($shortcode_tags);

    // Получаем все посты с шорткодами
    $posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_content LIKE '%[%]%' AND post_status = 'publish'");

    foreach ($posts as $post) {
        $content = $post->post_content;
        preg_match_all('/\[(\w+)[^\]]*\]/', $content, $matches);
        $shortcodes_in_post = $matches[1];

        $changed = false;
        foreach ($shortcodes_in_post as $shortcode) {
            if (!in_array($shortcode, $registered)) {
                $pattern = '/\[' . preg_quote($shortcode, '/') . '(\s[^\]]*)?\](?:.*?\[\/'. preg_quote($shortcode, '/') .'\])?/s';
                $content = preg_replace($pattern, '', $content);
                $changed = true;
            }
        }

        if ($changed) {
            $wpdb->update(
                $wpdb->posts,
                array('post_content' => $content),
                array('ID' => $post->ID)
            );
        }
    }
}
// Запустите функцию один раз через WP-CLI или в админке
// wpacademy_purge_unused_shortcodes_from_db();

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

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

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

  • Clearfy Pro — плагин для оптимизации WordPress, который включает модуль очистки неиспользуемых шорткодов и удаление скрытых мусорных данных. Подробнее — Clearfy Pro на wpshop.ru.
  • Shortcode Cleaner — бесплатный плагин в репозитории WordPress, который помогает находить и удалять неработающие шорткоды.
  • Better Search Replace — плагин для массовой замены текста в базе данных, который можно использовать для удаления шорткодов через поиск и замену.

Рекомендации по предотвращению накопления неиспользуемых шорткодов

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

  • При удалении плагинов, которые добавляли шорткоды, сначала удаляйте шорткоды из контента.
  • Используйте кастомные шорткоды с префиксом, например wpacademy_, чтобы избежать конфликтов и легче идентифицировать.
  • Регулярно проверяйте контент на наличие неработающих шорткодов с помощью SQL-запросов или плагинов.
  • Для динамического контента используйте блоки Gutenberg или виджеты вместо шорткодов, если это возможно.
Автоматическое удаление завершённых заказов WooCommerce через PHP
05.06.2026
Как создать фильтры для товаров в WooCommerce без плагинов
19.01.2026
Автоматическое удаление вариантов товаров WooCommerce по условию
24.05.2026
Как автоматизировать удаление неработающих шорткодов в WordPress
11.03.2026
Как удалить пустые категории в WordPress с помощью кода
21.03.2026