Шорткоды — мощный инструмент для добавления динамического контента в записи и страницы WordPress. Но со временем на сайте может накопиться множество неиспользуемых шорткодов, которые не только загромождают базу данных и редактор, но и могут вызывать ошибки или нежелательное поведение. В этой статье разберём, как автоматически находить и удалять неиспользуемые шорткоды, а также как сделать этот процесс безопасным и удобным.
Почему важно удалять неиспользуемые шорткоды? Оптимизация и поддержка
Если на сайте остались шорткоды, которые нигде не вызываются, это может привести к ряду проблем:
- Увеличение размера базы данных из-за хранения устаревших метаданных и кода.
- Ошибки отображения, если плагин или тема со шорткодом удалены, а код остался в записях.
- Затруднения при редактировании контента — устаревшие шорткоды путают авторов и вызывают лишние вопросы.
- Замедление работы сайта, если шорткоды обрабатываются, но не приносят пользы.
Регулярное удаление неиспользуемых шорткодов повышает стабильность и производительность сайта.
Как определить, какие шорткоды не используются?
Для начала нужно получить список всех зарегистрированных шорткодов на сайте. Это можно сделать через глобальную переменную $shortcode_tags, которая содержит все шорткоды, зарегистрированные через add_shortcode().
Затем необходимо проверить, используются ли эти шорткоды в контенте сайта — записях, страницах, виджетах и других местах.
Пример функции, которая возвращает массив всех зарегистрированных шорткодов:
function wpaddons_get_all_shortcodes() {
global $shortcode_tags;
return array_keys($shortcode_tags);
}
Далее нужно проверить контент на наличие каждого шорткода. Это делается через поиск по базе данных по шаблону \[shortcode_name.
Автоматическое удаление: как безопасно убрать неиспользуемые шорткоды из контента
Чтобы удалить неиспользуемые шорткоды, нам нужно выполнить поиск по всем записям и заменить их на пустую строку или другой контент.
Пример функции, которая находит записи с указанным шорткодом и удаляет его:
function wpaddons_remove_shortcode_from_content($shortcode) {
global $wpdb;
$like = '%[' . $wpdb->esc_like($shortcode) . '%';
$posts = $wpdb->get_results($wpdb->prepare(
"SELECT ID, post_content FROM {$wpdb->posts} WHERE post_content LIKE %s AND post_status IN ('publish','draft','pending')",
$like
));
foreach ($posts as $post) {
$pattern = get_shortcode_regex(array($shortcode));
$new_content = preg_replace('/' . $pattern . '/s', '', $post->post_content);
if ($new_content !== $post->post_content) {
wp_update_post(array(
'ID' => $post->ID,
'post_content' => $new_content
));
}
}
}
Эта функция использует get_shortcode_regex() для точного удаления шорткода, включая вложенный контент, если он есть.
Полный скрипт для автоматического поиска и удаления неиспользуемых шорткодов
Ниже пример, который можно запускать вручную через админку или по крону. Он проверяет зарегистрированные шорткоды, ищет их в контенте и удаляет те, которые не зарегистрированы (то есть не используются):
function wpaddons_cleanup_unused_shortcodes() {
global $wpdb, $shortcode_tags;
// Получаем все зарегистрированные шорткоды
$registered = array_keys($shortcode_tags);
// Получаем список всех шорткодов, которые встречаются в базе (через LIKE)
$query = "SELECT DISTINCT
SUBSTRING_INDEX(SUBSTRING_INDEX(post_content, '[', -1), ']', 1) as shortcode_fragment
FROM {$wpdb->posts}
WHERE post_content LIKE '%[%]%' AND post_status IN ('publish','draft','pending')";
$results = $wpdb->get_col($query);
$all_found = array();
// Извлекаем имена шорткодов из фрагментов
foreach ($results as $fragment) {
if (preg_match('/^([a-zA-Z0-9_-]+)/', $fragment, $matches)) {
$all_found[] = $matches[1];
}
}
$all_found = array_unique($all_found);
// Находим не зарегистрированные шорткоды — потенциально неиспользуемые
$unused = array_diff($all_found, $registered);
if (empty($unused)) {
return 'Unused shortcodes not found';
}
foreach ($unused as $shortcode) {
wpaddons_remove_shortcode_from_content($shortcode);
}
return 'Removed unused shortcodes: ' . implode(', ', $unused);
}
Эту функцию можно вызвать из админки или через AJAX для удобства. Чистка позволит избавиться от битых шорткодов и мусора.
Плагины для работы с шорткодами и оптимизацией контента
Если хочется готового решения, можно использовать плагины, которые помогут управлять шорткодами и чистить сайт:
- Shortcode Cleaner Lite — автоматическое удаление неработающих и неиспользуемых шорткодов.
- Shortcode UI — управление шорткодами с визуальным интерфейсом.
Для более продвинутой оптимизации и удаления мусора можно обратить внимание на Clearfy Pro — плагин для комплексной оптимизации, включая чистку неиспользуемых шорткодов и скриптов.
Советы по безопасности и резервному копированию перед удалением
Перед массовой очисткой контента обязательно сделайте резервную копию базы данных. Любые автоматические изменения контента могут привести к потере данных или ошибкам. Используйте плагин для резервного копирования, например, WP Backup.
Также рекомендуется запускать удаление сначала на копии сайта или в тестовой среде. После проверки результата можно применять изменения на живом сайте.
Выводы и рекомендации по автоматизации
Автоматическое удаление неиспользуемых шорткодов в WordPress помогает поддерживать чистоту и производительность сайта. Использование собственного кода, как показано выше, позволяет гибко настраивать процесс и интегрировать его в административные инструменты или задания по расписанию.
Для удобства и расширенных возможностей стоит рассмотреть использование плагинов оптимизации и управления шорткодами, а также делать регулярные резервные копии. Это обеспечит безопасность и стабильность вашего сайта.