В процессе работы с WordPress часто сталкиваешься с ситуацией, когда после удаления плагина или изменения темы в контенте остаются «избитые» шорткоды — короткие теги, которые больше не работают и портят внешний вид страниц. В этой статье мы разберёмся, как эффективно найти и удалить такие шорткоды, используя как готовые плагины, так и собственные решения на PHP.
Что такое избитые шорткоды и почему их важно удалять
Избитые шорткоды — это те, которые остались в тексте постов, страниц или виджетов, но функционал которых уже недоступен, потому что соответствующий плагин отключён или удалён. Они выглядят как текст с квадратными скобками, например [example_shortcode], но не преобразуются в нужный контент.
Если такие шорткоды не удалять, это приводит к:
- Неаккуратному выводу текста с квадратными скобками на сайте.
- Потере удобочитаемости контента для пользователей.
- Потенциальным ошибкам вёрстки и дизайна.
Поэтому регулярная очистка от избитых шорткодов — важная задача для каждого разработчика и администратора WordPress.
Автоматическое удаление избитых шорткодов с помощью плагинов
Самый простой способ — использовать проверенный плагин, который сканирует базу и удаляет неработающие шорткоды.
Плагин Remove Orphan Shortcodes
Плагин Remove Orphan Shortcodes позволяет за пару кликов очистить все записи от шорткодов, которые не зарегистрированы в текущей установке WordPress. Он безопасен, имеет фильтры для исключения нужных шорткодов и сохраняет резервные копии.
Пример использования:
- Установите и активируйте плагин.
- Перейдите в настройки плагина и запустите сканирование.
- Удалите найденные избитые шорткоды одним кликом.
Плагин Shortcode Cleaner
Ещё один полезный инструмент — Shortcode Cleaner. Он позволяет не только удалять избитые шорткоды, но и заменять их на кастомный текст или HTML, что удобно для SEO и дизайна.
Удаление избитых шорткодов с помощью кода в functions.php
Если вы предпочитаете не устанавливать лишние плагины, можно написать простой код, который будет находить и удалять избитые шорткоды из контента при выводе или сохранении.
Функция для удаления всех незарегистрированных шорткодов из контента
function wpskills_remove_orphan_shortcodes($content) {
global $shortcode_tags;
// Регулярное выражение для поиска всех шорткодов
preg_match_all('/\[(\[?)([\w\-]+)(?![\w\-])([^\]\/]*(?:\/(?!\])[^\]\/]+)*)(\/?)](\]?)/', $content, $matches);
if(empty($matches[2])) return $content;
foreach($matches[2] as $index => $shortcode) {
if(!isset($shortcode_tags[$shortcode])) {
// Удаляем шорткод из контента
$full_shortcode = $matches[0][$index];
$content = str_replace($full_shortcode, '', $content);
}
}
return $content;
}
add_filter('the_content', 'wpskills_remove_orphan_shortcodes');Этот код ищет все шорткоды в контенте и удаляет те, которых нет в списке зарегистрированных ($shortcode_tags — глобальный массив всех активных шорткодов). Фильтр the_content гарантирует, что очистка происходит при выводе поста.
Удаление избитых шорткодов при сохранении записи
Чтобы очистить контент ещё на этапе сохранения, используйте следующий код:
function wpskills_clean_shortcodes_on_save($post_id) {
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if(!current_user_can('edit_post', $post_id)) return;
$post = get_post($post_id);
if(!$post) return;
$clean_content = wpskills_remove_orphan_shortcodes($post->post_content);
if($clean_content !== $post->post_content) {
remove_action('save_post', 'wpskills_clean_shortcodes_on_save');
wp_update_post(array(
'ID' => $post_id,
'post_content' => $clean_content
));
add_action('save_post', 'wpskills_clean_shortcodes_on_save');
}
}
add_action('save_post', 'wpskills_clean_shortcodes_on_save');Этот подход гарантирует, что при сохранении записи «избитые» шорткоды будут удалены из базы данных, не дожидаясь вывода.
Как избежать появления избитых шорткодов в будущем
Чтобы минимизировать проблему с избитыми шорткодами, следуйте простым рекомендациям:
- Перед удалением плагина отключайте все шорткоды этого плагина или заменяйте их на альтернативные.
- Используйте системные средства поиска по базе (например, через SQL) для массовой замены или удаления шорткодов.
- Внедрите в тему или плагин универсальные заглушки для ключевых шорткодов, чтобы при их отсутствии выводился нейтральный текст, а не код.
Пример заглушки для шорткода
function wpskills_fallback_shortcode($atts, $content = null) {
return '<span style="color: red;">[шорткод временно недоступен]</span>';
}
add_shortcode('example_shortcode', 'wpskills_fallback_shortcode');Такой код регистрирует шорткод, который просто выводит предупреждение вместо ошибки и портящего дизайн кода.
Выводы и рекомендации
Удаление избитых шорткодов — обязательная часть поддержки WordPress-сайтов, особенно если вы активно меняете набор плагинов. Лучший вариант — комбинировать автоматические плагины для первичной очистки и кастомный код для тонкой настройки. Такой подход обеспечит чистоту контента и стабильность отображения страниц.
Если хотите подробнее ознакомиться с плагинами для очистки шорткодов, смотрите каталог плагинов на WPSHOP.