Почему важно удалять неиспользуемые шорткоды
Со временем в WordPress-сайте накапливается множество шорткодов, которые перестали использоваться. Это может быть связано с удалением плагинов, сменой темы или просто с устаревшими функциональными элементами. Наличие таких шорткодов не только засоряет контент, но и может приводить к ошибкам отображения, снижать производительность и усложнять поддержку сайта.
Удаление неиспользуемых шорткодов помогает:
- Улучшить читаемость контента без лишних элементов вида
[old_shortcode]; - Снизить нагрузку на парсер контента WordPress;
- Избежать конфликтов с новыми плагинами и темами;
- Облегчить сопровождение и развитие сайта.
Однако просто удалить регистрацию шорткода в коде недостаточно — нужно очистить все оставшиеся их следы в базе и тексте страниц.
Как найти неиспользуемые шорткоды в базе данных WordPress
Первый шаг — определить, какие шорткоды вообще есть на сайте и где они используются. Для этого можно выполнить SQL-запросы по таблице wp_posts (если префикс стандартный), где хранятся все посты, страницы и пользовательские типы записей.
Например, чтобы найти все записи, где встречается конкретный шорткод, используйте запрос:
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%[my_shortcode%';Но если шорткодов много, и нужно получить список всех используемых, можно выгрузить все тексты и проанализировать их программно.
Пример функции для поиска всех шорткодов в контенте
Воспользуемся регулярным выражением для поиска шорткодов внутри постов:
function wpexperts_find_all_shortcodes() {
global $wpdb;
$posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_status = 'publish'");
$shortcodes = [];
$pattern = '/\[(\w+)(\s|\])/' ;
foreach ($posts as $post) {
if (preg_match_all($pattern, $post->post_content, $matches)) {
foreach ($matches[1] as $shortcode) {
$shortcodes[$shortcode][] = $post->ID;
}
}
}
return $shortcodes;
}Эта функция вернёт массив, где ключ — название шорткода, а значение — массив ID постов, где этот шорткод используется. По этому списку можно понять, какие шорткоды реально применяются.
Удаление регистрации неиспользуемых шорткодов из кода
Если вы нашли шорткоды, которые не используются в контенте, то можно безопасно удалить их регистрацию. Обычно шорткоды регистрируются функцией add_shortcode в файлах темы или плагина.
Пример удаления шорткода old_shortcode:
function wpexperts_remove_unused_shortcode() {
remove_shortcode('old_shortcode');
}
add_action('init', 'wpexperts_remove_unused_shortcode');Важно сделать это на этапе init, чтобы WordPress не пытался обработать старые шорткоды в контенте.
Автоматическое удаление нераспознанных шорткодов из контента
Если на сайте остались записи с нераспознанными шорткодами, они будут выводиться в виде текста [old_shortcode], что портит внешний вид. Чтобы удалить такие шорткоды из контента без ручного редактирования каждой записи, можно использовать фильтр the_content.
Пример функции, которая удаляет нераспознанные шорткоды из постов при выводе:
function wpexperts_strip_unknown_shortcodes($content) {
// Получаем список всех зарегистрированных шорткодов
global $shortcode_tags;
// Шорткоды, которые встречаются в контенте
preg_match_all('/\[(\w+)(\s|\])/', $content, $matches);
if (empty($matches[1])) {
return $content;
}
foreach ($matches[1] as $shortcode) {
if (!isset($shortcode_tags[$shortcode])) {
// Удаляем нераспознанный шорткод из контента
$pattern = '/\[' . preg_quote($shortcode, '/') . '(\s[^\]]*)?\]/';
$content = preg_replace($pattern, '', $content);
}
}
return $content;
}
add_filter('the_content', 'wpexperts_strip_unknown_shortcodes');Этот код удалит все нераспознанные шорткоды при выводе, не меняя при этом содержимое в базе. Можно доработать скрипт для массового обновления базы, если нужно стереть шорткоды навсегда.
Пример массового удаления шорткодов из базы
Если требуется удалить шорткоды из самих записей, а не только на выводе, можно использовать WP_Query для перебора постов и функцию wp_update_post для сохранения очищенного контента.
function wpexperts_remove_shortcode_from_posts($shortcode) {
$args = [
'post_type' => 'any',
'posts_per_page' => -1,
's' => '[' . $shortcode,
'post_status' => 'publish',
];
$query = new WP_Query($args);
if (!$query->have_posts()) {
return;
}
while ($query->have_posts()) {
$query->the_post();
$content = get_the_content();
$pattern = '/\[' . preg_quote($shortcode, '/') . '(\s[^\]]*)?\]/';
$new_content = preg_replace($pattern, '', $content);
if ($new_content !== $content) {
wp_update_post([
'ID' => get_the_ID(),
'post_content' => $new_content,
]);
}
}
wp_reset_postdata();
}Вызовите функцию wpexperts_remove_shortcode_from_posts('old_shortcode'); для удаления конкретного шорткода из всех записей.
Советы по чистке шорткодов с использованием плагина Clearfy Pro
Плагин Clearfy Pro содержит функции оптимизации и очистки сайта, включая управление шорткодами и их удаление из контента.
Вы можете использовать его для быстрого поиска и удаления неиспользуемых шорткодов без ручного кода. Особенно полезна функция массовой очистки, которая безопасно обновляет записи с удалением устаревших шорткодов.
Clearfy Pro также помогает отключать неактивные функции плагинов и тем, что дополнительно повышает производительность сайта.
Выводы и рекомендации
Удаление неиспользуемых шорткодов — важный этап поддержания чистоты и производительности WordPress-сайта. С помощью SQL-запросов и PHP-функций можно выявить и очистить контент от устаревших шорткодов как вручную, так и автоматически.
Комбинируйте собственные скрипты с удобными инструментами, например, Clearfy Pro, чтобы сделать процесс более безопасным и эффективным.
Помните, что перед массовыми обновлениями всегда делайте резервные копии базы данных, чтобы избежать потерь данных.