Шорткоды в WordPress — очень удобный инструмент для быстрого добавления функционала на страницы и записи. Однако с течением времени на сайте накапливаются неиспользуемые шорткоды, которые могут мешать работе и создавать ошибки в отображении контента. В этой статье подробно рассмотрим, как найти и удалить неиспользуемые шорткоды, а также исправить ошибки, связанные с отсутствующими шорткодами.
Почему важно удалять неиспользуемые шорткоды
Неиспользуемые шорткоды — это шорткоды, которые больше не зарегистрированы в вашей теме или плагинах, но остались в содержимом записей или страниц. Они могут выглядеть в виде кода типа [old_shortcode], который не обрабатывается и выводится на сайт как есть, портя внешний вид и создавая путаницу для пользователей.
Кроме того, большое количество неиспользуемых шорткодов может замедлять парсинг контента и создавать дополнительные нагрузки на сервер, особенно если вы используете плагины для визуального построения страниц.
Регулярное удаление и очистка шорткодов помогает поддерживать сайт в порядке и улучшает пользовательский опыт.
Как найти неиспользуемые шорткоды в базе данных WordPress
Поиск шорткодов через SQL-запрос
Самый точный способ найти шорткоды — это выполнить поиск по базе данных. В WordPress контент записей и страниц хранится в таблице wp_posts в поле post_content. Для поиска всех шорткодов можно использовать SQL-запрос с регулярным выражением:
SELECT ID, post_title, post_content FROM wp_posts WHERE post_content REGEXP '\[[a-zA-Z0-9_\-]+\]';Этот запрос вернёт все записи и страницы, где встречаются шорткоды в формате [shortcode] или [shortcode attr="value"]. После получения списка можно отфильтровать те, которые относятся к несуществующим шорткодам.
Скрипт для поиска конкретных неиспользуемых шорткодов
Если вы знаете названия шорткодов, которые были удалены, например old_shortcode1, old_shortcode2, можно искать их конкретно:
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%[old_shortcode1%' OR post_content LIKE '%[old_shortcode2%';Такой запрос быстро покажет страницы, где остались эти шорткоды, и вы сможете их отредактировать.
Автоматическое удаление неиспользуемых шорткодов с помощью PHP-кода
Если на сайте много записей с неиспользуемыми шорткодами, редактировать вручную неудобно. Можно написать PHP-скрипт для массового удаления или замены шорткодов.
Пример функции для удаления всех шорткодов, которые не зарегистрированы в WordPress:
function wpquiz_remove_unused_shortcodes() {
global $wpdb;
// Получаем список всех зарегистрированных шорткодов
$registered_shortcodes = array_keys($GLOBALS['shortcode_tags']);
// Получаем все записи и страницы
$posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_type IN ('post', 'page') AND post_status = 'publish'");
foreach ($posts as $post) {
$content = $post->post_content;
// Находим все шорткоды в контенте
preg_match_all('/\[([a-zA-Z0-9_\-]+)(\s[^\]]*)?\]/', $content, $matches);
foreach ($matches[1] as $shortcode) {
if (!in_array($shortcode, $registered_shortcodes)) {
// Удаляем неиспользуемый шорткод из контента
$pattern = '/\[' . preg_quote($shortcode, '/') . '(\s[^\]]*)?\]/';
$content = preg_replace($pattern, '', $content);
}
}
// Обновляем запись, если контент изменился
if ($content !== $post->post_content) {
wp_update_post(array(
'ID' => $post->ID,
'post_content' => $content,
));
}
}
}
// Запуск функции при активации плагина или вручную
// wpquiz_remove_unused_shortcodes();Этот код перебирает все опубликованные записи и страницы, находит в них шорткоды, которые не зарегистрированы в текущем WordPress, и удаляет их из контента. Важно запускать такую функцию аккуратно и предварительно делать резервные копии базы.
Использование плагинов для поиска и очистки шорткодов
Для упрощения задачи можно воспользоваться готовыми плагинами, которые помогают управлять шорткодами:
- Shortcode Cleaner Lite — автоматически ищет и удаляет неработающие шорткоды, заменяя их на пустоту или кастомный текст.
- Remove Orphan Shortcodes — плагин для поиска и удаления «осиротевших» шорткодов, которые больше не поддерживаются.
- Clearfy Pro (ссылка: https://wpshop.ru/clearfy-pro/) — комплексный инструмент оптимизации сайта, который умеет работать с шорткодами и оптимизировать контент.
Использование плагинов удобно, когда вы не хотите погружаться в код, а хотите быстро очистить сайт от ошибок, связанных с шорткодами.
Как предотвратить появление неиспользуемых шорткодов в будущем
Чтобы минимизировать появление неиспользуемых шорткодов, придерживайтесь следующих рекомендаций:
- Перед деактивацией или удалением плагина, который добавляет шорткоды, очистите контент от этих шорткодов.
- Используйте кастомные поля или блоки Gutenberg вместо шорткодов, если это возможно — это более надёжно и удобно.
- Включите обработку ошибок в выводе шорткодов — например, вместо вывода кода оставлять пустой блок или выводить предупреждение в админке.
- Регулярно проверяйте базу данных на наличие неиспользуемых шорткодов с помощью SQL-запросов или плагинов.
Создание функции для автоматического удаления определённого шорткода по имени
Иногда нужно удалить конкретный шорткод из контента, например, если плагин давно удалён, а шорткод остался.
function wpquiz_remove_specific_shortcode($shortcode_name) {
global $wpdb;
$posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_type IN ('post', 'page') AND post_status = 'publish'");
foreach ($posts as $post) {
$content = $post->post_content;
$pattern = '/\[' . preg_quote($shortcode_name, '/') . '(\s[^\]]*)?\]/';
if (preg_match($pattern, $content)) {
$content = preg_replace($pattern, '', $content);
wp_update_post(array(
'ID' => $post->ID,
'post_content' => $content,
));
}
}
}
// Запуск удаления шорткода 'old_shortcode'
// wpquiz_remove_specific_shortcode('old_shortcode');Такой подход удобен, если вы знаете, какой именно шорткод нужно убрать, и хотите сделать это быстро.