Как создать автоматическую систему удаления нерабочих шорткодов в WordPress

В процессе работы с WordPress часто возникает ситуация, когда на сайте остаются нерабочие шорткоды. Это может случиться после удаления плагина, смены темы или из-за ошибок в коде. Нерабочие шорткоды выглядят как текст, который портит внешний вид сайта и негативно влияет на пользовательский опыт. В этой статье мы разберём, как создать автоматическую систему удаления таких шорткодов из контента WordPress с помощью собственного плагина или функции.

Почему важно удалять нерабочие шорткоды

Нерабочие шорткоды — это шорткоды, которые не обрабатываются WordPress и выводятся на странице как обычный текст. Это не только выглядит некрасиво, но и может негативно сказаться на SEO сайта, так как поисковики видят лишний хлам внутри контента. Ручное удаление таких шорткодов из большого количества записей — трудоёмкая задача.

Автоматизация процесса позволяет:

  • Обеспечить чистоту контента без лишних усилий.
  • Поддерживать качество сайта после удаления старых плагинов.
  • Избавиться от ошибок, связанных с нераспознанными шорткодами.

Определение нерабочих шорткодов и способы их обнаружения

Чтобы удалить нерабочие шорткоды, сначала нужно определить, какие из них не работают. WordPress хранит список зарегистрированных шорткодов в глобальном массиве $shortcode_tags. Если шорткод встречается в тексте, но его нет в этом массиве, значит он нерабочий.

Для поиска таких шорткодов в тексте можно использовать регулярные выражения. Например, шаблон \[([^\[\]]+)\] позволяет найти все шорткоды, заключённые в квадратные скобки. Но нужно учитывать, что шорткоды бывают разных типов — с параметрами, с вложенными шорткодами и так далее.

Пример функции для поиска нерабочих шорткодов

function wpcommunity_find_broken_shortcodes($content) {
    global $shortcode_tags;
    
    preg_match_all('/\[([^\[\]\/\s]+)(\s[^\]]*)?\]/', $content, $matches);
    
    $all_shortcodes = array_unique($matches[1]);
    $broken_shortcodes = array();
    foreach ($all_shortcodes as $shortcode) {
        if (!isset($shortcode_tags[$shortcode])) {
            $broken_shortcodes[] = $shortcode;
        }
    }
    
    return $broken_shortcodes;
}

Эта функция вернёт массив нераспознанных шорткодов в переданном тексте.

Автоматическое удаление нерабочих шорткодов из контента

После определения нерабочих шорткодов можно написать функцию, которая удалит их из текста. Для этого можно использовать ту же регулярку, но с проверкой на наличие в списке зарегистрированных шорткодов.

Пример функции удаления нерабочих шорткодов

function wpcommunity_remove_broken_shortcodes($content) {
    global $shortcode_tags;
    
    return preg_replace_callback('/\[([^\[\]\/\s]+)(\s[^\]]*)?\]/', function($matches) use ($shortcode_tags) {
        if (!isset($shortcode_tags[$matches[1]])) {
            // Удаляем нерабочий шорткод полностью
            return '';
        }
        return $matches[0];
    }, $content);
}

Эту функцию можно применить к содержимому постов перед выводом или сохранить исправленный контент в базе данных.

Автоматизация очистки нерабочих шорткодов по расписанию

Чтобы не заниматься очисткой вручную, можно реализовать автоматическую проверку и удаление нерабочих шорткодов с помощью WP-Cron. Создадим задачу, которая будет проходить по постам и очищать их контент.

Пример реализации WP-Cron задачи

function wpcommunity_schedule_shortcode_cleanup() {
    if (!wp_next_scheduled('wpcommunity_cron_shortcode_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wpcommunity_cron_shortcode_cleanup');
    }
}
add_action('wp', 'wpcommunity_schedule_shortcode_cleanup');

function wpcommunity_cron_shortcode_cleanup_callback() {
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => -1,
        'post_status' => 'publish',
    );
    $posts = get_posts($args);
    foreach ($posts as $post) {
        $content = $post->post_content;
        $clean_content = wpcommunity_remove_broken_shortcodes($content);
        if ($clean_content !== $content) {
            wp_update_post(array(
                'ID' => $post->ID,
                'post_content' => $clean_content,
            ));
        }
    }
}
add_action('wpcommunity_cron_shortcode_cleanup', 'wpcommunity_cron_shortcode_cleanup_callback');

Данная задача будет запускаться ежедневно, проходить по всем опубликованным постам и удалять нерабочие шорткоды из их контента.

Использование плагинов для управления шорткодами и очисткой

Для упрощения задачи можно использовать готовые плагины. Например, плагин Shortcode Cleaner помогает находить и удалять неиспользуемые шорткоды. Но их функционал часто ограничен, и для автоматизации на больших сайтах лучше использовать собственные решения.

Если вы пользуетесь плагинами от WPSHOP, посмотрите на возможности плагина Clearfy Pro, который содержит инструменты для оптимизации и очистки базы данных, включая строки с нерабочими шорткодами.

Советы по предотвращению появления нерабочих шорткодов

Чтобы в будущем не сталкиваться с проблемой нерабочих шорткодов, придерживайтесь следующих рекомендаций:

  • Перед удалением плагина отключайте и удаляйте шорткоды из контента.
  • Используйте шорткоды с префиксами, чтобы избежать конфликтов.
  • Реализуйте обработчики, которые заменяют или скрывают шорткоды, если плагин отключён.
  • Проверяйте контент на наличие нерабочих шорткодов перед публикацией.

Таким образом, автоматическая система удаления нерабочих шорткодов поможет поддерживать сайт в чистоте и избежать проблем с отображением контента. Используйте приведённые функции и настройте WP-Cron для регулярной очистки. Если нужно, дополняйте функционал с помощью плагинов от WPSHOP для более глубокой оптимизации.

Как удалить неиспользуемые метаданные в базе данных WordPress
06.12.2025
Как создать автоматическую систему удаления нерабочих изображений в WordPress
15.03.2026
Как установить ограничения на регистрацию в WordPress по домену e-mail
30.01.2026
Как добавить дополнительные поля в форму регистрации WordPress
24.01.2026
Автоматическое изменение цены товара WooCommerce по атрибуту
17.04.2026

Задать вопрос о вордпресс, получить ответ - это все можно сделать в нашем сообществе WP. Сайт в данный момент в разработке, изучите ссылки ниже: