Диагностика проблемы с неиспользуемыми шорткодами
При удалении плагинов или смене тем в 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-скрипт с регулярками | Автоматизация, точное удаление | Требует навыков, риск ошибок в регулярках | Средние и крупные проекты |
| Плагины очистки контента | Удобный интерфейс | Зависимость от плагина, ограниченная функциональность | Пользователи без навыков кода |