Шорткоды — это удобный способ добавлять динамический контент в WordPress. Однако со временем на сайте может накопиться много неиспользуемых или устаревших шорткодов, которые могут вызывать ошибки или просто загромождать базу данных. В этой статье мы разберём, как найти такие шорткоды и удалить их без использования плагинов, используя собственные функции и инструменты WordPress.
Что такое неиспользуемые шорткоды и почему их стоит удалять
Неиспользуемые шорткоды — это те, которые зарегистрированы в теме или плагинах, но в текущем контенте сайта уже не применяются. Они могут оставаться после удаления плагинов, смены темы или при обновлении функционала. Их присутствие может привести к отображению на сайте нераспознанного текста вида [shortcode] вместо ожидаемого контента, влиять на производительность и увеличивать размер базы данных.
Удаление таких шорткодов помогает сделать сайт чище, предотвращает ошибки и облегчает дальнейшее сопровождение.
Важно помнить, что удалять шорткод из кода нужно аккуратно, чтобы не сломать функционал. Поэтому сначала стоит найти все места, где он используется, и удалить или заменить их.
Как найти неиспользуемые шорткоды в базе данных WordPress
Первый шаг — определить, какие шорткоды зарегистрированы и какие из них реально используются в содержимом сайта. Для этого можно выполнить поиск в базе данных по таблице wp_posts (где хранятся записи и страницы) на наличие вызовов шорткодов.
Для поиска используем SQL-запросы через phpMyAdmin или любой другой инструмент работы с базой:
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%[example_shortcode%';Здесь example_shortcode замените на имя шорткода. Если запрос не возвращает результатов, значит шорткод не используется в постах.
Чтобы получить список всех шорткодов, зарегистрированных на сайте, можно воспользоваться функцией WordPress shortcode_exists() и получить список из глобального массива $shortcode_tags.
Пример функции wpdebug_get_unused_shortcodes для поиска неиспользуемых шорткодов
Ниже приведён пример функции, которая перебирает все зарегистрированные шорткоды и проверяет, встречаются ли они в содержимом записей. Выводит список неиспользуемых.
function wpdebug_get_unused_shortcodes() {
global $wpdb, $shortcode_tags;
$unused = array();
foreach (array_keys($shortcode_tags) 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 (intval($count) === 0) {
$unused[] = $shortcode;
}
}
return $unused;
}
// Использование
$unused_shortcodes = wpdebug_get_unused_shortcodes();
echo 'Неиспользуемые шорткоды: ' . implode(', ', $unused_shortcodes);Эта функция помогает быстро определить, какие шорткоды зарегистированы, но не встречаются в контенте сайта. На основании этого списка можно решить, какие шорткоды стоит удалить.
Как безопасно удалить неиспользуемые шорткоды из кода
Удаление шорткодов из кода включает удаление регистрации шорткода и очистку контента от их вызовов при необходимости.
Регистрация шорткода обычно делается функцией add_shortcode('имя_шорткода', 'функция_обработчик'). Для удаления шорткода достаточно вызвать remove_shortcode('имя_шорткода').
Пример удаления шорткода в файле functions.php вашей темы или в вашем плагине:
function wpdebug_remove_unused_shortcodes() {
$unused = wpdebug_get_unused_shortcodes();
foreach ($unused as $shortcode) {
remove_shortcode($shortcode);
}
}
add_action('init', 'wpdebug_remove_unused_shortcodes');Однако если в базе данных остались вызовы этих шорткодов, они будут выводиться как простой текст. Чтобы полностью очистить контент, можно написать скрипт для поиска и удаления таких вызовов из постов.
Очистка контента от вызовов неиспользуемых шорткодов
Для удаления шорткодов из содержимого можно использовать регулярное выражение для поиска и замены:
function wpdebug_remove_shortcode_from_content($content, $shortcode) {
$pattern = get_shortcode_regex(array($shortcode));
return preg_replace('/'. $pattern .'/s', '', $content);
}
function wpdebug_clean_unused_shortcodes_in_posts() {
global $wpdb;
$unused = wpdebug_get_unused_shortcodes();
foreach ($unused as $shortcode) {
$posts = $wpdb->get_results(
$wpdb->prepare("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_content LIKE %s", '%' . $wpdb->esc_like('[' . $shortcode) . '%')
);
foreach ($posts as $post) {
$clean_content = wpdebug_remove_shortcode_from_content($post->post_content, $shortcode);
if ($clean_content !== $post->post_content) {
$wpdb->update(
$wpdb->posts,
array('post_content' => $clean_content),
array('ID' => $post->ID)
);
}
}
}
}
// Запускать один раз, например, через WP-CLI или временно подключить к хуку
// wpdebug_clean_unused_shortcodes_in_posts();Этот код последовательно ищет записи с вызовами неиспользуемых шорткодов и удаляет их, сохраняя обновлённый контент.
Проверка и резервное копирование перед удалением
Перед выполнением операций по удалению шорткодов и очистке контента крайне важно сделать резервную копию базы данных. Это позволит восстановить сайт в случае ошибки.
Также рекомендуется сначала протестировать функции на тестовом сайте или в локальной среде, чтобы убедиться, что удаление происходит корректно и не влияет на нужный контент.
Для удобства можно добавить логирование удалений и изменений, чтобы отслеживать процесс и результат.
Альтернативные методы и плагины для работы с шорткодами
Хотя мы рассматриваем методы без плагинов, для некоторых пользователей может быть полезно воспользоваться специализированными плагинами, которые помогают управлять шорткодами:
- Shortcode Cleaner Lite — автоматическая очистка нераспознанных шорткодов из контента.
- Shortcode Manager — регистрация и удаление шорткодов с удобным интерфейсом.
Тем не менее, написание собственных функций, как в примерах выше, даёт полный контроль и не нагружает сайт дополнительными расширениями.
Итоговые рекомендации по удалению неиспользуемых шорткодов
Подводя итог, можно выделить следующие основные шаги:
- Определить список зарегистрированных шорткодов.
- Проверить их использование в содержимом сайта.
- Удалить регистрацию неиспользуемых шорткодов из кода.
- Очистить содержимое постов от вызовов этих шорткодов.
- Обязательно сделать резервное копирование перед изменениями.
- Провести тестирование на тестовом сайте.
Соблюдая эти рекомендации, можно поддерживать сайт на WordPress в чистоте и порядке, избегая возможных проблем с неиспользуемыми шорткодами.