wpclean.ru wordpress WPClean.ru

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

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

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

Чтобы проверить, есть ли такие шорткоды, выполните SQL-запрос к базе данных (используйте phpMyAdmin или любой другой инструмент):

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

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

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

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

Это критично, чтобы избежать потери данных при ошибках.

2. Удаление шорткодов через SQL-запросы

Если вы уверены, что шорткод имеет фиксированное имя, например [oldshortcode], можете удалить его так:

UPDATE wp_posts 
SET post_content = REPLACE(post_content, '[oldshortcode]', '') 
WHERE post_content LIKE '%[oldshortcode]%';

Если шорткод имеет параметры, можно использовать регулярные выражения в MySQL 8+:
REGEXP_REPLACE(post_content, '\[oldshortcode[^\]]*\]', '')

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

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

function remove_specific_shortcode($content, $shortcode) {
    $pattern = '\\[' . preg_quote($shortcode, '/') . '(\\b[^\]]*)?\\]((?:[^\\[]|\\[(?!/' . preg_quote($shortcode, '/') . '\\]))*?)\\[/' . preg_quote($shortcode, '/') . '\\]';
    return preg_replace('/' . $pattern . '/s', '', $content);
}

$posts = get_posts(array('numberposts' => -1));
foreach ($posts as $post) {
    $new_content = remove_specific_shortcode($post->post_content, 'oldshortcode');
    if ($new_content !== $post->post_content) {
        wp_update_post(array(
            'ID' => $post->ID,
            'post_content' => $new_content
        ));
    }
}

Этот код удаляет только заданный шорткод oldshortcode из всех постов.

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

  • Повторите SQL-запрос для поиска шорткода: если не возвращается ничего — удаление прошло успешно.
  • Проверьте несколько записей и страницы сайта, где раньше появлялся шорткод — вместо него должен быть чистый текст без ошибок.
  • Проверьте размер базы данных и время загрузки страниц — они должны улучшиться.

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

  • Удаление без резервной копии. Ошибка: потеря данных при некорректном запросе. Решение: всегда делайте резервную копию перед изменениями.
  • Неправильное имя шорткода. Запрос не удаляет, потому что имя указано с ошибкой или с другими параметрами. Решение: проверьте точное имя шорткода в коде темы/плагина.
  • Удаление только части шорткода. При удалении через простой REPLACE остаются закрывающие теги или параметры, создается некорректный контент. Решение: используйте регулярные выражения или PHP-функции для полного удаления.
  • Кэширование сайта. После очистки шорткодов видите старый контент. Решение: очистите кэш плагинов (WP Super Cache, W3 Total Cache и др.) и браузера.

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

  • Перед массовыми изменениями отключите автоматические обновления и кэширование, чтобы избежать конфликтов.
  • Для больших сайтов разбивайте обновления на части (например, по 100 постов), чтобы избежать таймаутов.
  • Используйте WP-CLI для массового поиска и замены шорткодов — это быстрее и надежнее, пример команды:
wp search-replace '\[oldshortcode[^\]]*\]' '' --regex --all-tables

Сравнение методов удаления шорткодов

МетодПлюсыМинусыКогда использовать
SQL REPLACEБыстрое выполнение, подходит для простых шорткодовНе удаляет шорткоды с параметрами и вложенныеПростые шорткоды без параметров
SQL REGEXP_REPLACE (MySQL 8+)Удаляет шорткоды с параметрамиСложность написания регулярных выражений, не для старых MySQLСложные шорткоды, MySQL 8+
PHP с preg_replaceГибкое удаление любых шорткодов, можно фильтроватьДольше выполняется, требует программированияСложные сценарии, кастомные шорткоды
WP-CLI search-replaceБыстро, удобно для больших сайтов, поддерживает regexНужен доступ к консоли сервераОптимальный для опытных разработчиков
×
-15%
на премиум плагин
My Popup

Повысьте конверсию!

Получить скидку »