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

Диагностика проблемы с неиспользуемыми шорткодами

При удалении плагинов или смене тем в WordPress часто остаются шорткоды, которые больше не обрабатываются. Они отображаются как текст вида [example_shortcode] прямо на страницах и постах, портя внешний вид сайта и снижая UX. Чтобы убедиться в наличии таких шорткодов, выполните поиск по базе данных на предмет текста вида \[.*\] или визуально просмотрите страницы с подозрением на нераспарсенные шорткоды.

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

SELECT ID, post_title FROM wp_posts WHERE post_content REGEXP '\\[.+?\\]';

Этот запрос вернёт записи с потенциальными шорткодами в содержимом. Если вы знаете имена удалённых шорткодов, уточните запрос, например:

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

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

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

1. Создайте резервную копию базы данных

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

2. Определите список шорткодов для удаления

Заведите массив с именами шорткодов, которые хотите убрать:

$shortcodes_to_remove = ['old_shortcode1', 'old_shortcode2', 'unused_shortcode'];

3. Функция для удаления шорткодов из контента

function remove_unused_shortcodes_from_posts( $shortcodes ) {
    global $wpdb;
    foreach ( $shortcodes as $shortcode ) {
        // Регулярка для удаления шорткодов с атрибутами и без
        $pattern = '\\[' . preg_quote( $shortcode, '/' ) . '(\s[^\\]]*)?\\](?:.*?\\[\\/' . preg_quote( $shortcode, '/' ) . '\\])?';
        // Обновляем посты по частям для экономии памяти
        $posts = $wpdb->get_results( $wpdb->prepare(
            "SELECT ID, post_content FROM {$wpdb->posts} WHERE post_content LIKE %s",
            '%' . $wpdb->esc_like( '[' . $shortcode ) . '%'
        ) );

        foreach ( $posts as $post ) {
            $new_content = preg_replace( '/' . $pattern . '/s', '', $post->post_content );
            if ( $new_content !== $post->post_content ) {
                $wpdb->update( $wpdb->posts, ['post_content' => $new_content], ['ID' => $post->ID] );
            }
        }
    }
}

// Вызов функции
remove_unused_shortcodes_from_posts( $shortcodes_to_remove );

Этот код удалит все формы указанных шорткодов, включая вложенный контент, если он есть.

Проверка результата после внедрения

1. Повторите SQL-запрос из раздела диагностики — посты с указанными шорткодами не должны возвращаться.
2. Визуально проверьте страницы, где были шорткоды — не должно быть текстовых меток типа [old_shortcode1].
3. Используйте плагин «Better Search Replace» или аналог, чтобы убедиться, что по ключам удаления ничего не найдено.

Частые ошибки и как их исправить

  • Паттерн регулярного выражения слишком простой: приводит к неполному удалению или удалению лишнего. Используйте флаг /s для многострочности и экранируйте имена шорткодов.
  • Не сделана резервная копия базы: после ошибки сложнее восстановить данные.
  • Не учитываются вложенные шорткоды: удаление может оставить обрывки кода.
  • Кеширование: после обновления контента очистите кеш сайта и браузера, иначе изменения не будут видны.

Практические советы по безопасности и производительности

  • Выполняйте операции на копии сайта, если это возможно, чтобы избежать простоев.
  • Используйте WP-CLI для массовых операций — это быстрее и безопаснее, например, экспорт контента, поиск и замена.
  • Очищайте кеш после изменений и отключайте плагин кеширования на время обновлений.
  • При большом количестве данных разбивайте операции на части, чтобы избежать таймаутов.
  • После удаления шорткодов проверьте, не остались ли связанные CSS и JS файлы, которые можно удалить для оптимизации.

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

МетодПреимуществаНедостаткиПрименимость
Ручное удаление в редактореПросто, без кодаДолго, риск пропуститьНебольшое количество страниц
SQL-запросы с LIKEБыстро, массовоРиск удалить лишнее, не удаляет вложенный контентТехнические пользователи
PHP-скрипт с регуляркамиАвтоматизация, точное удалениеТребует навыков, риск ошибок в регуляркахСредние и крупные проекты
Плагины очистки контентаУдобный интерфейсЗависимость от плагина, ограниченная функциональностьПользователи без навыков кода
Автоматическое удаление старых записей WordPress через AJAX
22.01.2026
Как автоматизировать управление пользовательскими ролями в WordPress
25.02.2026
Как удалить старые и неиспользуемые медиа файлы в WordPress
04.01.2026
Как решить ошибку 429 в WooCommerce при автообновлении корзины
22.04.2026
Как удалить заблокированных пользователей в WordPress с помощью кода
07.01.2026