В процессе работы с WordPress часто возникает ситуация, когда на сайте остаются нерабочие шорткоды. Это может случиться после удаления плагина, смены темы или из-за ошибок в коде. Нерабочие шорткоды выглядят как текст, который портит внешний вид сайта и негативно влияет на пользовательский опыт. В этой статье мы разберём, как создать автоматическую систему удаления таких шорткодов из контента WordPress с помощью собственного плагина или функции.
Почему важно удалять нерабочие шорткоды
Нерабочие шорткоды — это шорткоды, которые не обрабатываются WordPress и выводятся на странице как обычный текст. Это не только выглядит некрасиво, но и может негативно сказаться на SEO сайта, так как поисковики видят лишний хлам внутри контента. Ручное удаление таких шорткодов из большого количества записей — трудоёмкая задача.
Автоматизация процесса позволяет:
- Обеспечить чистоту контента без лишних усилий.
- Поддерживать качество сайта после удаления старых плагинов.
- Избавиться от ошибок, связанных с нераспознанными шорткодами.
Определение нерабочих шорткодов и способы их обнаружения
Чтобы удалить нерабочие шорткоды, сначала нужно определить, какие из них не работают. WordPress хранит список зарегистрированных шорткодов в глобальном массиве $shortcode_tags. Если шорткод встречается в тексте, но его нет в этом массиве, значит он нерабочий.
Для поиска таких шорткодов в тексте можно использовать регулярные выражения. Например, шаблон \[([^\[\]]+)\] позволяет найти все шорткоды, заключённые в квадратные скобки. Но нужно учитывать, что шорткоды бывают разных типов — с параметрами, с вложенными шорткодами и так далее.
Пример функции для поиска нерабочих шорткодов
function wpcommunity_find_broken_shortcodes($content) {
global $shortcode_tags;
preg_match_all('/\[([^\[\]\/\s]+)(\s[^\]]*)?\]/', $content, $matches);
$all_shortcodes = array_unique($matches[1]);
$broken_shortcodes = array();
foreach ($all_shortcodes as $shortcode) {
if (!isset($shortcode_tags[$shortcode])) {
$broken_shortcodes[] = $shortcode;
}
}
return $broken_shortcodes;
}
Эта функция вернёт массив нераспознанных шорткодов в переданном тексте.
Автоматическое удаление нерабочих шорткодов из контента
После определения нерабочих шорткодов можно написать функцию, которая удалит их из текста. Для этого можно использовать ту же регулярку, но с проверкой на наличие в списке зарегистрированных шорткодов.
Пример функции удаления нерабочих шорткодов
function wpcommunity_remove_broken_shortcodes($content) {
global $shortcode_tags;
return preg_replace_callback('/\[([^\[\]\/\s]+)(\s[^\]]*)?\]/', function($matches) use ($shortcode_tags) {
if (!isset($shortcode_tags[$matches[1]])) {
// Удаляем нерабочий шорткод полностью
return '';
}
return $matches[0];
}, $content);
}
Эту функцию можно применить к содержимому постов перед выводом или сохранить исправленный контент в базе данных.
Автоматизация очистки нерабочих шорткодов по расписанию
Чтобы не заниматься очисткой вручную, можно реализовать автоматическую проверку и удаление нерабочих шорткодов с помощью WP-Cron. Создадим задачу, которая будет проходить по постам и очищать их контент.
Пример реализации WP-Cron задачи
function wpcommunity_schedule_shortcode_cleanup() {
if (!wp_next_scheduled('wpcommunity_cron_shortcode_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpcommunity_cron_shortcode_cleanup');
}
}
add_action('wp', 'wpcommunity_schedule_shortcode_cleanup');
function wpcommunity_cron_shortcode_cleanup_callback() {
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
'post_status' => 'publish',
);
$posts = get_posts($args);
foreach ($posts as $post) {
$content = $post->post_content;
$clean_content = wpcommunity_remove_broken_shortcodes($content);
if ($clean_content !== $content) {
wp_update_post(array(
'ID' => $post->ID,
'post_content' => $clean_content,
));
}
}
}
add_action('wpcommunity_cron_shortcode_cleanup', 'wpcommunity_cron_shortcode_cleanup_callback');
Данная задача будет запускаться ежедневно, проходить по всем опубликованным постам и удалять нерабочие шорткоды из их контента.
Использование плагинов для управления шорткодами и очисткой
Для упрощения задачи можно использовать готовые плагины. Например, плагин Shortcode Cleaner помогает находить и удалять неиспользуемые шорткоды. Но их функционал часто ограничен, и для автоматизации на больших сайтах лучше использовать собственные решения.
Если вы пользуетесь плагинами от WPSHOP, посмотрите на возможности плагина Clearfy Pro, который содержит инструменты для оптимизации и очистки базы данных, включая строки с нерабочими шорткодами.
Советы по предотвращению появления нерабочих шорткодов
Чтобы в будущем не сталкиваться с проблемой нерабочих шорткодов, придерживайтесь следующих рекомендаций:
- Перед удалением плагина отключайте и удаляйте шорткоды из контента.
- Используйте шорткоды с префиксами, чтобы избежать конфликтов.
- Реализуйте обработчики, которые заменяют или скрывают шорткоды, если плагин отключён.
- Проверяйте контент на наличие нерабочих шорткодов перед публикацией.
Таким образом, автоматическая система удаления нерабочих шорткодов поможет поддерживать сайт в чистоте и избежать проблем с отображением контента. Используйте приведённые функции и настройте WP-Cron для регулярной очистки. Если нужно, дополняйте функционал с помощью плагинов от WPSHOP для более глубокой оптимизации.