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

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

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

Удаление неиспользуемых шорткодов — это не только вопрос чистоты кода, но и оптимизации производительности. Вот несколько причин, почему стоит это делать:

  • Уменьшение нагрузки на сервер: обработка множества лишних шорткодов требует ресурсов;
  • Чистота базы данных и контента: уменьшение хаоса повышает стабильность и упрощает поддержку;
  • Избежание визуальных ошибок: нераспознанные шорткоды отображаются как текст, что портит внешний вид;
  • Облегчение миграции и обновлений: меньше устаревших вызовов — проще обновлять темы и плагины.

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

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

1. Поиск по базе данных через SQL-запросы

Шорткоды обычно находятся в таблице wp_posts в поле post_content. Чтобы найти все записи с определённым шорткодом, используйте запрос:

SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%[shortcode_name%';

Если вы не знаете, какие шорткоды используются, можно сделать поиск по шаблону %[% — все шорткоды начинаются с [:

SELECT ID, post_title FROM wp_posts WHERE post_content REGEXP '\\[[a-zA-Z0-9_\-]+';

Это позволит найти все записи с любыми шорткодами.

2. Программный поиск шорткодов через PHP

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

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

function wordpresses_find_unused_shortcodes() {
    global $wpdb;
    $registered_shortcodes = array_keys($GLOBALS['shortcode_tags']);
    $unused = [];
    foreach ($registered_shortcodes as $shortcode) {
        $like = '%[' . $wpdb->esc_like($shortcode) . '%';
        $count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
            $like
        ));
        if (!$count) {
            $unused[] = $shortcode;
        }
    }
    return $unused;
}

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

3. Использование WP_Query для поиска по постам

Пример запроса для поиска шорткода [example] в постах:

$query = new WP_Query([
    's' => '[example',
    'post_type' => 'any',
    'posts_per_page' => -1
]);
foreach($query->posts as $post) {
    echo 'Найдена запись: ' . esc_html($post->post_title) . '<br>';
}

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

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

Самый простой способ — выполнить SQL-запрос, который удалит все вхождения шорткода:

UPDATE wp_posts SET post_content = REPLACE(post_content, '[shortcode_name]', '') WHERE post_content LIKE '%[shortcode_name]%';
<

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

function wordpresses_remove_shortcode_from_content($content, $shortcode) {
    $pattern = get_shortcode_regex([$shortcode]);
    return preg_replace('/' . $pattern . '/s', '', $content);
}

// Пример массового удаления в цикле
$posts = get_posts(['post_type' => 'any', 'numberposts' => -1]);
foreach ($posts as $post) {
    $new_content = wordpresses_remove_shortcode_from_content($post->post_content, 'shortcode_name');
    if ($new_content !== $post->post_content) {
        wp_update_post(['ID' => $post->ID, 'post_content' => $new_content]);
    }
}

Этот скрипт удалит все вызовы шорткода, не затрагивая остальной контент.

Удаление неиспользуемых шорткодов из мета-полей и виджетов

Шорткоды могут храниться не только в постах, но и в пользовательских полях (мета), а также в виджетах. Для поиска и удаления их там нужно:

1. Поиск в meta_value таблицы wp_postmeta

SELECT post_id, meta_key FROM wp_postmeta WHERE meta_value LIKE '%[shortcode_name%';

Для очистки можно использовать PHP:

$meta_items = $wpdb->get_results($wpdb->prepare(
    "SELECT meta_id, meta_value FROM {$wpdb->postmeta} WHERE meta_value LIKE %s",
    '%[shortcode_name%'
));
foreach ($meta_items as $item) {
    $new_value = preg_replace('/\[' . preg_quote('shortcode_name') . '[^\]]*\]/', '', $item->meta_value);
    if ($new_value !== $item->meta_value) {
        $wpdb->update(
            $wpdb->postmeta,
            ['meta_value' => $new_value],
            ['meta_id' => $item->meta_id]
        );
    }
}

2. Очистка виджетов

Данные виджетов хранятся в опциях. Для поиска шорткодов в виджетах можно попробовать сериализованный поиск в таблице wp_options по ключу widget_*.

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

Практические советы для работы с шорткодами и оптимизацией

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

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

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

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

<?php
/**
 * Plugin Name: WordPresses Remove Unused Shortcodes
 * Description: Удаляет шорткод [example] из контента при активации.
 * Version: 1.0
 * Author: WordPresses
 */

register_activation_hook(__FILE__, 'wordpresses_remove_unused_shortcode_activation');

function wordpresses_remove_unused_shortcode_activation() {
    $shortcode = 'example';
    $posts = get_posts(['post_type' => 'any', 'numberposts' => -1]);
    foreach ($posts as $post) {
        $new_content = wordpresses_remove_shortcode_from_content($post->post_content, $shortcode);
        if ($new_content !== $post->post_content) {
            wp_update_post(['ID' => $post->ID, 'post_content' => $new_content]);
        }
    }
}

function wordpresses_remove_shortcode_from_content($content, $shortcode) {
    $pattern = get_shortcode_regex([$shortcode]);
    return preg_replace('/' . $pattern . '/s', '', $content);
}

Таким образом, вы можете адаптировать этот код под свои нужды и запускать удаление по расписанию или вручную.

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

Как создать автоматический импорт постов в WordPress из Google Sheets
12.04.2026
Как создать собственный шорткод в WordPress
06.11.2025
Как создать динамический фильтр товаров в WooCommerce без плагинов
09.01.2026
Как использовать хуки WordPress для оптимизации загрузки сайта
17.01.2026
Как добавить автоматическое сохранение постов через AJAX в WordPress
23.01.2026