В процессе развития сайта на WordPress часто накапливаются шорткоды, которые перестают использоваться — например, после удаления плагинов или изменения структуры контента. Такие неиспользуемые шорткоды могут создавать лишний мусор в базе данных и даже вызывать ошибки при выводе страниц. В этой статье разберём, как автоматически находить и удалять неиспользуемые шорткоды из контента WordPress с помощью практических решений и примеров кода.
Почему важно удалять неиспользуемые шорткоды
Неиспользуемые шорткоды — это текстовые метки вида [example_shortcode], которые остались в содержимом записей, но не имеют зарегистрированной функции-обработчика. Визуально на сайте они обычно отображаются как текст ошибки или просто остаются неразобранными тегами, что портит внешний вид страниц и снижается пользовательский опыт.
Кроме визуальных проблем, неиспользуемые шорткоды могут:
- нагружать базу данных избыточными данными;
- вызывать конфликты с другими плагинами;
- замедлять загрузку страниц из-за дополнительных парсингов;
- усложнять администрирование сайта.
Регулярное удаление таких шорткодов помогает поддерживать сайт в чистоте и оптимизировать производительность.
Как определить, какие шорткоды не используются
Для начала нужно получить список всех зарегистрированных шорткодов на сайте. В WordPress они сохраняются в глобальном массиве $shortcode_tags. Сравнив этот список с теми шорткодами, которые встречаются в содержимом записей, можно выявить неиспользуемые.
Пример функции для получения зарегистрированных шорткодов с префиксом wpload_:
function wpload_get_registered_shortcodes() {
global $shortcode_tags;
return array_keys($shortcode_tags);
}Далее, для поиска шорткодов в тексте записей можно использовать регулярное выражение:
/\[(\w+)(\s[^\]]*)?\]/Эта регулярка найдёт все шорткоды вида [shortcode] или с атрибутами [shortcode attr="value"].
Автоматический поиск и удаление неиспользуемых шорткодов
Ниже приводится пример функции, которая:
- Получает все записи с контентом.
- Ищет в них все шорткоды.
- Сравнивает с зарегистрированными шорткодами.
- Удаляет неиспользуемые из контента.
- Обновляет записи с исправленным содержимым.
function wpload_remove_unused_shortcodes() {
global $wpdb;
$registered_shortcodes = wpload_get_registered_shortcodes();
$pattern = '/\[(\w+)(\s[^\]]*)?\]/';
// Получаем все посты с контентом
$posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type IN ('post', 'page')");
foreach ($posts as $post) {
preg_match_all($pattern, $post->post_content, $matches);
$shortcodes_in_post = $matches[1];
$content = $post->post_content;
$updated = false;
foreach ($shortcodes_in_post as $shortcode) {
if (!in_array($shortcode, $registered_shortcodes)) {
// Удаляем неиспользуемый шорткод
$content = preg_replace('/\[' . preg_quote($shortcode, '/') . '(\s[^\]]*)?\]/', '', $content);
$updated = true;
}
}
if ($updated) {
wp_update_post([
'ID' => $post->ID,
'post_content' => $content
]);
}
}
}Эту функцию можно запускать вручную или добавить в WP-CLI команду для удобства. Также стоит делать резервные копии базы данных перед массовыми изменениями.
Использование плагинов для управления шорткодами
Если не хочется писать код, можно использовать плагины, которые помогают находить и управлять шорткодами:
- Shortcode Cleaner Lite — позволяет удалять неработающие шорткоды из контента.
- Shortcodes Ultimate — мощный набор шорткодов с возможностью отключать ненужные.
Для комплексного управления можно рассмотреть плагин Clearfy Pro, который содержит инструменты оптимизации и очистки базы данных, включая работу с шорткодами.
Советы по предотвращению накопления неиспользуемых шорткодов
Чтобы не допускать появления неиспользуемых шорткодов, придерживайтесь следующих рекомендаций:
- Перед удалением плагина, который добавляет шорткоды, сначала удалите или замените шорткоды в контенте.
- Используйте шорткоды с префиксами, уникальными для плагина или темы, чтобы легче было их идентифицировать.
- Регулярно проверяйте базу данных на наличие незарегистрированных шорткодов с помощью SQL-запросов или скриптов.
- Автоматизируйте очистку шорткодов с помощью задач WP-Cron или WP-CLI.
Пример SQL-запроса для поиска шорткодов в базе
SELECT ID, post_content FROM wp_posts WHERE post_content REGEXP '\[[a-zA-Z0-9_]+( [^\]]*)?\]';Этот запрос поможет выявить записи, содержащие любые шорткоды, для дальнейшего анализа.
Пример автоматизации через WP-Cron
function wpload_schedule_shortcode_cleanup() {
if (!wp_next_scheduled('wpload_remove_unused_shortcodes_cron')) {
wp_schedule_event(time(), 'daily', 'wpload_remove_unused_shortcodes_cron');
}
}
add_action('wp', 'wpload_schedule_shortcode_cleanup');
add_action('wpload_remove_unused_shortcodes_cron', 'wpload_remove_unused_shortcodes');Этот код добавит ежедневную задачу, которая будет автоматически чистить неиспользуемые шорткоды.