Shortcode — удобный инструмент для вставки функционала и контента в записи и страницы WordPress. Однако со временем в базе контента могут накопиться устаревшие, неиспользуемые или ошибочные шорткоды, которые выводят мусор или ломают верстку. В этой статье разберём, как эффективно и безопасно удалить такие shortcode из контента WordPress, используя практические методы и примеры кода.
Почему появляются ненужные shortcode в WordPress
Причины появления лишних шорткодов бывают разными:
- Удаление плагина или темы, которые добавляли шорткод, но контент с ними остался;
- Ошибки при создании или обновлении шорткодов, приводящие к некорректному выводу;
- Эксперименты с контентом, когда некоторые шорткоды перестали быть актуальными;
- Миграции и импорт данных из других сайтов с неподдерживаемыми shortcode.
В таких случаях на страницах и записях появляются необработанные конструкции вида [example_shortcode], которые портят внешний вид и снижают удобочитаемость.
Основные способы удаления шорткодов из контента WordPress
Удалить шорткод можно несколькими способами:
- Через базу данных — поиск и замена в wp_posts;
- Через фильтр the_content — программное удаление на лету;
- Используя плагин — специализированные инструменты для очистки;
- Редактирование вручную — с помощью поиска по записям в админке.
Рассмотрим каждый способ подробнее с примерами.
Удаление шорткодов через запросы в базе данных
Если нужно массово удалить определённый шорткод из всех записей, самый быстрый способ — SQL-запрос. Предположим, нужно удалить шорткод [oldshortcode] из поля post_content таблицы wp_posts. Запрос будет таким:
UPDATE wp_posts SET post_content = REPLACE(post_content, '[oldshortcode]', '') WHERE post_content LIKE '%[oldshortcode]%';Если шорткод с параметрами, можно использовать регулярные выражения в MySQL 8+ или экспортировать контент для обработки скриптом. Будьте осторожны: всегда делайте бэкап базы перед такими операциями!
Удаление шорткодов программно через фильтр the_content
Если не хотите трогать базу напрямую, можно удалить шорткод динамически при выводе контента. Для этого в файл functions.php вашей темы или в кастомный плагин добавьте функцию с префиксом wpskills_:
function wpskills_remove_oldshortcode($content) {
// Удаляем все вхождения [oldshortcode] и его закрывающего варианта
$pattern = '/\[oldshortcode.*?\](.*?)\[\/oldshortcode\]/s';
$content = preg_replace($pattern, '', $content);
// Удаляем одиночные шорткоды [oldshortcode param="value"]
$pattern_single = '/\[oldshortcode[^\]]*\]/';
$content = preg_replace($pattern_single, '', $content);
return $content;
}
add_filter('the_content', 'wpskills_remove_oldshortcode');Этот код ищет и удаляет все вариации шорткода, включая вложенный контент и параметры. Такой подход не изменяет данные в базе, а просто убирает вывод при показе постов.
Использование плагинов для очистки контента от шорткодов
Если не хочется писать код, можно использовать плагины. Например:
- Shortcode Cleaner — удаляет неиспользуемые шорткоды из контента;
- Clearfy Pro — мощный оптимизатор с функцией удаления лишних шорткодов;
- Плагины для массового поиска и замены по базе (например, Better Search Replace), в которых можно найти и удалить конкретные шорткоды.
Плагины удобны, если вы не хотите править код и хотите получить визуальный интерфейс управления.
Как безопасно удалить шорткод, не повредив контент
Перед удалением важно:
- Сделать резервную копию сайта и базы данных;
- Понять, используется ли шорткод где-то еще;
- Проверить, нет ли зависимостей, чтобы не сломать отображение;
- Тестировать изменения сначала на тестовом сайте.
Также полезно написать функцию, которая предупредит вас о вхождениях шорткода. Например:
function wpskills_find_oldshortcode_posts() {
$args = [
's' => '[oldshortcode',
'post_type' => 'any',
'posts_per_page' => 100,
];
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
echo 'Найден шорткод в посте: ' . get_the_title() . '\n';
}
} else {
echo 'Шорткод не найден в постах';
}
wp_reset_postdata();
}Вызов этой функции через консоль или в админке поможет оценить масштаб задачи.
Обработка нескольких шорткодов и комплексные сценарии
Если нужно удалить сразу несколько шорткодов, можно расширить функцию удаления:
function wpskills_remove_multiple_shortcodes($content) {
$shortcodes = ['oldshortcode', 'unusedcode', 'testshortcode'];
foreach ($shortcodes as $shortcode) {
// Удаляем закрывающиеся и одиночные варианты
$pattern = '/\[' . $shortcode . '.*?\](.*?)\[\/' . $shortcode . '\]/s';
$content = preg_replace($pattern, '', $content);
$pattern_single = '/\[' . $shortcode . '[^\]]*\]/';
$content = preg_replace($pattern_single, '', $content);
}
return $content;
}
add_filter('the_content', 'wpskills_remove_multiple_shortcodes');Для сложных случаев стоит рассмотреть создание отдельного консольного скрипта на WP-CLI, который позволит безопасно и быстро чистить контент.
Использование функций для удаления шорткодов из пользовательских полей и метаданных
Шорткоды могут встречаться не только в тексте постов, но и в метаполях. Чтобы очистить и их, можно применить похожие методы, перебирая метаданные через get_post_meta и обновляя через update_post_meta.
Пример функции для удаления шорткодов из метаполей:
function wpskills_clean_shortcode_in_meta($post_id, $meta_key, $shortcode) {
$content = get_post_meta($post_id, $meta_key, true);
if (strpos($content, '[' . $shortcode) !== false) {
$pattern = '/\[' . $shortcode . '.*?\](.*?)\[\/' . $shortcode . '\]/s';
$content = preg_replace($pattern, '', $content);
$pattern_single = '/\[' . $shortcode . '[^\]]*\]/';
$content = preg_replace($pattern_single, '', $content);
update_post_meta($post_id, $meta_key, $content);
}
}Такой подход полезен для пользователей, у которых контент хранится не только в стандартном редакторе.
Выводы и рекомендации
Удаление ненужных шорткодов — важный этап поддержания чистоты и производительности сайта. Выбирайте метод, исходя из задачи и технических возможностей сайта. Если не уверены, используйте фильтр the_content для динамического удаления. Для массовых операций — SQL-запросы с бэкапами. Плагины типа Clearfy Pro помогут автоматизировать и упростить задачу.
Используйте представленные примеры кода с префиксом wpskills_, чтобы избежать конфликтов с другими функциями и легко поддерживать код.