В процессе разработки и эксплуатации сайтов на WordPress часто накапливаются шорткоды, которые уже не используются, но остаются зарегистрированными в системе. Это не только увеличивает нагрузку на сайт, но и может привести к ошибкам вывода контента, а также влияет на безопасность. В этой статье мы рассмотрим, как автоматически находить и удалять неиспользуемые шорткоды из кода и базы данных WordPress, а также как оптимизировать работу с ними.
Что такое неиспользуемые шорткоды и почему их стоит удалять
Шорткоды — это удобный способ вставлять динамический контент в записи, страницы и виджеты. Однако при смене темы, удалении плагинов или переработке контента многие шорткоды остаются в базе, но больше не отображаются, поскольку соответствующий код не подключен.
Причины удалить неиспользуемые шорткоды:
- Избежать вывода необработанных коротких кодов вида
[example_shortcode]на страницах. - Оптимизировать работу сайта, снизить нагрузку на парсинг контента.
- Снизить риски безопасности — старые шорткоды могут содержать уязвимости.
- Упростить администрирование и поддержку сайта.
Как найти неиспользуемые шорткоды в WordPress
Для начала необходимо выяснить, какие шорткоды зарегистрированы в системе и какие реально используются в контенте.
Получение списка зарегистрированных шорткодов
WordPress хранит шорткоды в глобальном массиве $shortcode_tags. Чтобы получить все зарегистрированные шорткоды, используем следующий код:
function wpaction_get_registered_shortcodes() {
global $shortcode_tags;
return array_keys($shortcode_tags);
}
$registered_shortcodes = wpaction_get_registered_shortcodes();
var_dump($registered_shortcodes);Этот список покажет все шорткоды, которые в данный момент доступны на сайте.
Поиск шорткодов в контенте базы данных
Чтобы понять, какие шорткоды реально используются, нужно просканировать содержимое записей, страниц и других типов записей. В WordPress контент хранится в таблице wp_posts в поле post_content.
Пример SQL-запроса для поиска конкретного шорткода [example_shortcode]:
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%[example_shortcode%';Чтобы автоматизировать поиск всех шорткодов из списка, можно использовать PHP-скрипт, который перебирает записи и проверяет вхождение каждого шорткода:
function wpaction_find_used_shortcodes($shortcodes) {
global $wpdb;
$used = [];
foreach ($shortcodes as $shortcode) {
$pattern = '%\[' . $wpdb->esc_like($shortcode) . '%';
$query = $wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE %s LIMIT 1", $pattern);
$post_id = $wpdb->get_var($query);
if ($post_id) {
$used[] = $shortcode;
}
}
return $used;
}
$registered = wpaction_get_registered_shortcodes();
$used_shortcodes = wpaction_find_used_shortcodes($registered);
var_dump($used_shortcodes);Этот код возвращает массив шорткодов, которые реально встречаются в контенте.
Автоматическое удаление неиспользуемых шорткодов из реестра
Шорткоды, которые не используются, можно удалить из реестра шорткодов WordPress, чтобы они не обрабатывались и не вызывали ошибок.
Это делается с помощью функции remove_shortcode(). Для автоматизации можно написать функцию, которая будет удалять все неиспользуемые шорткоды:
function wpaction_remove_unused_shortcodes() {
$registered = wpaction_get_registered_shortcodes();
$used = wpaction_find_used_shortcodes($registered);
$unused = array_diff($registered, $used);
foreach ($unused as $shortcode) {
remove_shortcode($shortcode);
}
return $unused;
}
add_action('init', function() {
$removed = wpaction_remove_unused_shortcodes();
if (!empty($removed)) {
error_log('Removed unused shortcodes: ' . implode(', ', $removed));
}
});Этот код удалит из обработки все шорткоды, которые не используются в контенте, и запишет в лог список удалённых.
Очистка контента от неиспользуемых шорткодов
Если в базе остались записи с устаревшими шорткодами, их можно очистить, чтобы не выводить некорректный текст на страницах. Для этого подойдёт функция wpaction_strip_unused_shortcodes_from_content(), которая удалит из контента все неиспользуемые шорткоды вместе с их параметрами.
function wpaction_strip_unused_shortcodes_from_content($content) {
global $shortcode_tags;
$registered = array_keys($shortcode_tags);
$used = wpaction_find_used_shortcodes($registered);
$unused = array_diff($registered, $used);
foreach ($unused as $shortcode) {
// Регулярное выражение для поиска шорткода с параметрами и вложенным контентом
$pattern = '\\[' . preg_quote($shortcode, '/') . '(\s[^\\]]*)?\\](.*?)\\[\\/' . preg_quote($shortcode, '/') . '\\]';
$content = preg_replace('/' . $pattern . '/s', '', $content);
// Также удаляем одиночные шорткоды без закрывающего тега
$pattern_single = '\\[' . preg_quote($shortcode, '/') . '(\s[^\\]]*)?\\/\\]';
$content = preg_replace('/' . $pattern_single . '/', '', $content);
}
return $content;
}
add_filter('the_content', 'wpaction_strip_unused_shortcodes_from_content', 20);Этот фильтр автоматически очистит вывод контента от неиспользуемых шорткодов.
Полезные плагины для работы с шорткодами
Если вы хотите использовать готовые решения для управления шорткодами, обратите внимание на следующие плагины:
- Shortcode Cleaner Lite — простой плагин для удаления неработающих шорткодов из контента.
- Shortcode UI — позволяет просматривать и управлять шорткодами, упрощает их использование.
- Clearfy Pro с модулями оптимизации — помогает удалять неиспользуемые функции, в том числе шорткоды, ускоряя сайт. Подробнее на wpshop.ru/clearfy-pro.
Практические рекомендации и советы
Для эффективного управления шорткодами придерживайтесь следующих правил:
- Регулярно проверяйте контент на наличие устаревших шорткодов, особенно после удаления плагинов и смены тем.
- Автоматизируйте очистку с помощью созданных функций или плагинов, чтобы избежать ошибок в выводе.
- Перед удалением шорткодов из реестра убедитесь, что они действительно не используются, чтобы не сломать функционал.
- Храните резервные копии базы данных перед массовыми изменениями контента.
- Используйте логи для контроля удалённых шорткодов и быстрого реагирования на возможные проблемы.
Таким образом, автоматическое удаление неиспользуемых шорткодов значительно оптимизирует работу сайта на WordPress, улучшит скорость загрузки и безопасность. Внедряйте описанные решения в свои проекты, чтобы поддерживать код в чистоте и порядке.