wpclean.ru wordpress WPClean.ru

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

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

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

Для диагностики используйте поиск по базе данных через phpMyAdmin или аналогичный инструмент. Запрос для поиска шорткодов по паттерну [shortcode] или [shortcode attr=] выглядит так:

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

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

global $shortcode_tags;
print_r(array_keys($shortcode_tags));

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

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

Внимание: перед выполнением любых операций с базой сделайте полный бэкап.

  1. Определите точное имя неиспользуемого шорткода, например old_shortcode.
  2. Подготовьте SQL-запрос, который удалит все вхождения шорткода из post_content. Пример для простого шорткода без вложенных атрибутов:
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(post_content, '\[old_shortcode[^\]]*\]', '', 'g')
WHERE post_content LIKE '%[old_shortcode%';

Если сервер MySQL версии ниже 8.0 и не поддерживает REGEXP_REPLACE, используйте PHP-скрипт для массовой очистки.

  1. Для сложных случаев, когда шорткод имеет закрывающий тег [old_shortcode]...[/old_shortcode], используйте регулярное выражение с захватом содержимого:
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(post_content, '\[old_shortcode[^\]]*\].*?\[/old_shortcode\]', '', 'gs')
WHERE post_content LIKE '%[old_shortcode%';

Обратите внимание на флаги g (глобальный) и s (многострочный режим) для корректной работы с многострочным контентом.

Пример PHP-скрипта для удаления шорткодов при отсутствии поддержки REGEXP_REPLACE

?php
$shortcode = 'old_shortcode';
$args = [
    'post_type' => 'any',
    's' => "[{$shortcode}",
    'posts_per_page' => -1,
];
$posts = get_posts($args);
foreach ($posts as $post) {
    $content = $post->post_content;
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback('/' . $pattern . '/', function($matches) use ($shortcode) {
        return $matches[2] === $shortcode ? '' : $matches[0];
    }, $content);
    wp_update_post(['ID' => $post->ID, 'post_content' => $content]);
}
?>

Проверка результата после очистки

  • Запустите SQL-запрос для поиска остатков шорткода: SELECT ID FROM wp_posts WHERE post_content LIKE '%[old_shortcode%';. Должен вернуть 0 записей.
  • Проверьте несколько отредактированных постов в админке — шорткод должен исчезнуть из контента.
  • Тестируйте фронтенд на предмет ошибок и корректного отображения страниц, где был удалён шорткод.

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

  • Отсутствие бэкапа: при ошибках восстановления данных не будет. Всегда делайте копию базы.
  • Неправильное регулярное выражение: удаляет лишний контент или не удаляет шорткод. Тестируйте на копии БД.
  • Игнорирование вложенных шорткодов: если шорткод содержит вложенные, простое удаление может повредить структуру. Используйте PHP-скрипт с get_shortcode_regex().
  • Удаление активных шорткодов: проверьте, что шорткод действительно не используется в коде темы или плагина.

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

  • Перед массовой заменой отключите на время кэширование и плагины, которые могут кешировать содержимое.
  • Выполняйте операции на копии базы, если сайт большой, чтобы избежать блокировок и долгой работы запроса.
  • Для регулярного удаления неиспользуемых шорткодов используйте WP-CLI с кастомным скриптом для автоматизации.
  • Используйте плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpclean.ru&utm_medium=article&utm_campaign=kak-udalit-neispolzuemye-shortkody-iz-bazy-dannyh-wordpress-s-pomoshhyu-sql) для комплексной оптимизации и чистки сайта — он поможет выявлять и удалять мусор, в том числе шорткоды.

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

МетодПлюсыМинусыПодходит для
SQL-запрос с REGEXP_REPLACE Быстро, без загрузки WordPress Требуется MySQL 8+, риск ошибки в regexp Большие сайты с поддержкой MySQL 8+
PHP-скрипт с get_shortcode_regex() Точно, учитывает вложенные шорткоды Долго на больших сайтах, требует запуска в WP Средние и маленькие сайты
Плагины для очистки Простота использования Не всегда гибко, могут быть платными Быстрая уборка без кода
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙