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

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

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

Если шорткод не зарегистрирован в WordPress, то при выводе контента он отображается как обычный текст, например, [gallery] или [old_plugin_shortcode]. Это не только портит внешний вид страниц, но и может сбивать с толку посетителей. Помимо визуального дефекта, избыточные шорткоды:

  • Увеличивают размер базы данных, особенно если их много в старом контенте.
  • Могут конфликтовать с другими плагинами и вызывать ошибки PHP.
  • Ухудшают SEO, так как поисковые системы видят мусорный контент.

Поэтому регулярный аудит и очистка шорткодов — важная часть поддержки сайта.

Как найти все шорткоды в контенте сайта

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

Поиск с помощью SQL-запроса

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

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

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

Поиск конкретных шорткодов с помощью PHP

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

function wpmentor_get_all_shortcodes() {
    global $wpdb;
    $posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type IN ('post','page')");
    $shortcodes = [];
    foreach ($posts as $post) {
        if (preg_match_all('/\[(\w+)(\s[\w\s="\'-:,.#]*)?\]/', $post->post_content, $matches)) {
            foreach ($matches[1] as $shortcode) {
                $shortcodes[$shortcode] = true;
            }
        }
    }
    return array_keys($shortcodes);
}

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

Как проверить, какие шорткоды зарегистрированы в WordPress

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

function wpmentor_list_registered_shortcodes() {
    global $shortcode_tags;
    return array_keys($shortcode_tags);
}

Сравнив список найденных в контенте шорткодов с зарегистрированными, вы получите перечень неиспользуемых и неактивных шорткодов.

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

Самый надёжный способ убрать неиспользуемые шорткоды — заменить их в базе данных. При этом важно делать резервную копию перед изменениями!

Простой поиск и замена через SQL

Если вы точно знаете, какой шорткод хотите удалить, например [oldshortcode], можно выполнить такой запрос:

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

Этот запрос удалит все вхождения шорткода без параметров.

Удаление шорткодов с параметрами через PHP

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

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

// Пример использования:
$posts = get_posts(['numberposts' => -1, 'post_type' => ['post', 'page']]);
foreach ($posts as $post) {
    $new_content = wpmentor_remove_shortcode_from_content($post->post_content, 'oldshortcode');
    if ($new_content !== $post->post_content) {
        wp_update_post([
            'ID' => $post->ID,
            'post_content' => $new_content,
        ]);
    }
}

Этот код безопасно удалит все вхождения указанного шорткода из контента.

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

Если удалить шорткод полностью нельзя (например, плагин временно деактивирован), можно подавить отображение ошибок с помощью фильтра. Добавьте в functions.php следующий код:

function wpmentor_disable_shortcode_output($empty = '', $tag = '', $attr = []) {
    // Возвращаем пустую строку вместо текста шорткода
    return '';
}
add_filter('do_shortcode_tag', 'wpmentor_disable_shortcode_output', 10, 3);

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

Полезные плагины для работы с шорткодами

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

  • Shortcode Cleaner Lite — автоматически удаляет неработающие шорткоды из контента.
  • Better Search Replace — удобный плагин для поиска и замены текста в базе данных, включая шорткоды.
  • String Locator — помогает найти в коде и базе все упоминания нужного шорткода.

Но имейте в виду, что автоматические инструменты требуют внимания и резервного копирования.

Советы по предотвращению появления неиспользуемых шорткодов

Чтобы в будущем не сталкиваться с проблемой:

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

Таким образом вы сохраните чистоту контента и стабильность сайта.

WooCommerce: решение проблемы неработающей функции изменения стоимости товара при добавлении в корзину
22.04.2026
Оптимизация загрузки шаблонов в WordPress для ускорения сайта
15.12.2025
Как создать автоматический бэкап базы данных WordPress
03.04.2026
Как добавить поле Google reCAPTCHA в форму регистрации WordPress
12.03.2026
Как настроить автоматический экспорт отчетов в WordPress
16.01.2026