wpdownload.ru wordpress WPDownload.ru

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

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

Что такое неиспользуемые шорткоды и почему их нужно удалять

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

Удаление таких шорткодов помогает:

  • Избавиться от некрасивых тегов на страницах;
  • Повысить читаемость и качество контента;
  • Уменьшить нагрузку на парсер WordPress при генерации страницы.

Ручной поиск и удаление шорткодов из сотен записей занимает много времени, поэтому автоматизация — лучший вариант.

Как найти неиспользуемые шорткоды в базе данных WordPress

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

Ниже пример функции wpdownload_find_unused_shortcodes(), которая ищет неиспользуемые шорткоды в таблице постов:

function wpdownload_find_unused_shortcodes() {
    global $wpdb, $shortcode_tags;

    // Получаем все зарегистрированные шорткоды
    $registered = array_keys($shortcode_tags);

    // Получаем все шорткоды, встречающиеся в контенте
    $pattern = get_shortcode_regex();
    $used = [];

    $posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_status = 'publish'");

    foreach ($posts as $post) {
        if (preg_match_all('/'. $pattern .'/s', $post->post_content, $matches) ) {
            foreach ($matches[2] as $shortcode) {
                $used[$shortcode] = true;
            }
        }
    }

    // Находим неиспользуемые - зарегистрированные, но не встречающиеся в контенте
    $unused = array_diff($registered, array_keys($used));

    return $unused;
}

Эта функция вернёт массив с именами шорткодов, которые сейчас зарегистрированы, но не встречаются в опубликованном контенте.

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

Если нужно удалить из базы данных неиспользуемые шорткоды, то сначала важно понимать разницу: шорткод может быть зарегистрирован, но не использоваться в контенте, либо наоборот — встречаться в контенте, но не быть зарегистрированным (например, после удаления плагина). Нас интересуют именно не зарегистрированные, но встречающиеся в контенте, т.к. они выводятся как текст.

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

function wpdownload_find_unregistered_shortcodes() {
    global $wpdb, $shortcode_tags;

    $registered = array_keys($shortcode_tags);
    $pattern = get_shortcode_regex();
    $unregistered = [];

    $posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_status = 'publish'");

    foreach ($posts as $post) {
        if (preg_match_all('/'. $pattern .'/s', $post->post_content, $matches) ) {
            foreach ($matches[2] as $shortcode) {
                if (!in_array($shortcode, $registered)) {
                    $unregistered[$shortcode][] = $post->ID;
                }
            }
        }
    }

    return $unregistered;
}

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

Пример функции для удаления незарегистрированных шорткодов:

function wpdownload_remove_unregistered_shortcodes() {
    global $wpdb, $shortcode_tags;

    $unregistered = wpdownload_find_unregistered_shortcodes();

    if (empty($unregistered)) {
        return;
    }

    foreach ($unregistered as $shortcode => $post_ids) {
        foreach ($post_ids as $post_id) {
            $content = get_post_field('post_content', $post_id);
            $pattern = '/\[' . preg_quote($shortcode) . '(\s[^\]]*)?\](?:([^\[]*?)\[\/' . preg_quote($shortcode) . '\])?/s';
            $new_content = preg_replace($pattern, '', $content);
            if ($new_content !== $content) {
                wp_update_post([
                    'ID' => $post_id,
                    'post_content' => $new_content
                ]);
            }
        }
    }
}

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

Если вы предпочитаете готовые решения, то есть несколько плагинов, которые помогут управлять шорткодами:

  • Shortcodes Cleaner — автоматически находит и удаляет неиспользуемые шорткоды из контента.
  • Remove Orphan Shortcodes — плагин для удаления шорткодов, которые остались после деактивации плагинов.

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

Автоматизация очистки шорткодов с помощью WP-Cron

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

function wpdownload_schedule_shortcode_cleanup() {
    if (!wp_next_scheduled('wpdownload_cleanup_hook')) {
        wp_schedule_event(time(), 'weekly', 'wpdownload_cleanup_hook');
    }
}
add_action('wp', 'wpdownload_schedule_shortcode_cleanup');

add_action('wpdownload_cleanup_hook', 'wpdownload_remove_unregistered_shortcodes');

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

Советы по работе с шорткодами и их очисткой

При массовом удалении шорткодов важно:

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

Если вы используете плагины из набора WPSHOP, например, WPRemark или Expert Review, то стоит дополнительно проверить, не зависят ли их функции от конкретных шорткодов перед удалением.

Выводы и рекомендации

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

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

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше