wp-lessons.ru wordpress WP-Lessons

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

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

При работе с WordPress часто накапливаются шорткоды, которые больше не используются: устаревшие плагины удалены, но их шорткоды остались в содержимом записей и страниц. Это приводит к отображению в контенте текста вроде [old_shortcode] или ошибкам, если шорткод не зарегистрирован. Такие «мертвые» шорткоды ухудшают пользовательский опыт и могут влиять на SEO.

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

Первый шаг — определить, где в базе данных встречаются шорткоды, которые не зарегистрированы в вашей текущей установке WordPress. Для этого используйте запрос к базе данных через phpMyAdmin или WP-CLI.

Пример запроса для поиска шорткодов в содержимом постов:

SELECT ID, post_title, post_content FROM wp_posts WHERE post_content REGEXP '\\[[a-zA-Z0-9_-]+\\]';

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

Автоматическая проверка зарегистрированных шорткодов:

В файле functions.php или отдельном сниппете можно вывести список зарегистрированных шорткодов:

global $shortcode_tags;
var_dump(array_keys($shortcode_tags));

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

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

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

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

2. Определите список неиспользуемых шорткодов

С помощью предыдущих шагов составьте массив шорткодов, которые нужно удалить.

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

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

function remove_unused_shortcodes( array $shortcodes ) {
    global $wpdb;
    foreach ( $shortcodes as $shortcode ) {
        $pattern = '\\[' . preg_quote($shortcode, '/') . '(\s[^\]]*)?\\]';
        // Удаляем как одиночные, так и закрывающие шорткоды с содержимым
        $pattern_full = '/\\[' . preg_quote($shortcode, '/') . '(\s[^\]]*)?\\](.*?)\\[\\/' . preg_quote($shortcode, '/') . '\\]/s';

        // Обновляем посты
        $posts = $wpdb->get_results($wpdb->prepare(
            "SELECT ID, post_content FROM {$wpdb->posts} WHERE post_content REGEXP %s",
            $pattern
        ));

        foreach ( $posts as $post ) {
            $content = preg_replace($pattern_full, '', $post->post_content);
            $content = preg_replace($pattern, '', $content);
            // Обновляем содержимое
            $wpdb->update(
                $wpdb->posts,
                array('post_content' => $content),
                array('ID' => $post->ID)
            );
        }
    }
}

// Пример вызова функции
remove_unused_shortcodes(array('old_shortcode1', 'old_shortcode2'));

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

Чтобы убедиться, что шорткоды удалены:

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

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

  • Удаление активных шорткодов: Проверьте дважды, что шорткод действительно не используется, иначе функционал сайта может сломаться.
  • Неправильный паттерн регулярного выражения: Используйте preg_quote для экранирования, чтобы избежать неправильных замен.
  • Отсутствие резервной копии: Перед массовыми изменениями всегда создавайте бэкап базы данных.
  • Кеширование: Иногда шорткоды видны из-за кеша — очищайте кеш после изменений.

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

  • Запускайте массовое редактирование на тестовом сервере или в off-peak часы, чтобы не нагружать базу данных.
  • Используйте транзакции (если поддерживаются СУБД) для отката изменений в случае ошибки.
  • Для больших сайтов разбивайте обновления на части, чтобы избежать таймаутов.
  • Если нужно регулярно чистить неиспользуемые шорткоды, автоматизируйте процесс с помощью WP-Cron, но осторожно с нагрузкой.

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

МетодОписаниеПлюсыМинусы
Ручной поиск и удалениеЧерез админку или кодПростота, не требует навыков SQLДолго, риск пропустить шорткоды
SQL-запросы + PHP-скриптАвтоматическое удаление в базеБыстро и эффективно для больших сайтовТребует осторожности и резервной копии
Плагины для чистки контентаГрафический интерфейсУдобство, дополнительные функцииНагрузка, потенциальные конфликты
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙