В процессе развития сайта на WordPress часто возникают ситуации, когда в контенте остаются неработающие шорткоды. Это может происходить после удаления или деактивации плагинов, которые эти шорткоды обрабатывали, или из-за устаревших решений. Такие шорткоды отображаются как текст с квадратными скобками, портят внешний вид страниц и снижают удобство для посетителей. В этой статье разберём, как автоматизировать удаление неработающих шорткодов из контента, чтобы поддерживать сайт в чистоте и порядке.
Почему важно удалять неработающие шорткоды
Неработающие шорткоды не только ухудшают визуальное восприятие страниц, но и могут повлиять на SEO, если поисковые системы фиксируют лишний мусор в тексте. Кроме того, они создают путаницу для редакторов и пользователей, которые видят непонятные конструкции. Ручное исправление – трудоёмкий и долгий процесс, особенно на больших сайтах. Автоматизация решает эту проблему эффективно и надёжно.
Удалять такие шорткоды нужно аккуратно, чтобы не затронуть актуальный и работающий функционал. Для этого необходимо выявить именно те шорткоды, обработка которых отсутствует, и безопасно их удалить из базы данных.
Как определить неработающие шорткоды в WordPress
WordPress хранит зарегистрированные шорткоды в глобальном массиве $shortcode_tags. Если шорткод встречается в контенте, но отсутствует в этом массиве, значит, он неактивен и, скорее всего, не работает.
Для автоматизации проверки можно использовать регулярные выражения для поиска всех шорткодов в текстах, а затем сравнивать их с зарегистрированными.
Пример функции для поиска всех шорткодов в тексте
function wpacademy_find_shortcodes($content) {
preg_match_all('/\[([^\[\]\s]+)(\s[^\[\]]*)?\]/', $content, $matches);
return $matches[1];
}Эта функция вернёт массив всех шорткодов, встречающихся в тексте, включая неработающие.
Автоматическое удаление неработающих шорткодов из контента
Для удаления неработающих шорткодов нам нужно пройтись по всем записям (post_content), найти шорткоды, которые не зарегистрированы, и удалить их из текста. Ниже представлен пример функции, которую можно запускать вручную или через WP-CLI для массовой очистки.
function wpacademy_remove_broken_shortcodes() {
global $wpdb;
$registered_shortcodes = array_keys($GLOBALS['shortcode_tags']);
$posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_content LIKE '%[%' AND post_status = 'publish'");
foreach ($posts as $post) {
$shortcodes_in_post = wpacademy_find_shortcodes($post->post_content);
$broken_shortcodes = array_diff($shortcodes_in_post, $registered_shortcodes);
if (!empty($broken_shortcodes)) {
$new_content = $post->post_content;
foreach ($broken_shortcodes as $sc) {
// Удаляем все вхождения этого шорткода, включая параметры
$pattern = '/\[' . preg_quote($sc, '/') . '(\s[^\]]*)?\](?:([^\[]*?)\[\/'. preg_quote($sc, '/') . '\])?/s';
$new_content = preg_replace($pattern, '', $new_content);
}
if ($new_content !== $post->post_content) {
$wpdb->update(
$wpdb->posts,
['post_content' => $new_content],
['ID' => $post->ID],
['%s'],
['%d']
);
}
}
}
}Эта функция:
- Получает все опубликованные записи с контентом, содержащим шорткоды;
- Находит неработающие шорткоды;
- Удаляет их из контента, включая закрывающие теги, если они есть;
- Обновляет посты в базе.
Важно: перед запуском таких операций обязательно сделайте полный бэкап базы, чтобы избежать потери данных.
Использование плагинов для управления шорткодами
Если вы предпочитаете готовые решения, есть плагины, которые помогают находить и чистить неработающие шорткоды:
- Shortcode Cleaner Lite – автоматизирует удаление неработающих шорткодов из контента и комментариев.
- Clearfy Pro – многофункциональный плагин для оптимизации WordPress, в том числе умеет управлять шорткодами и скрывать неиспользуемые.
Для установки и настройки таких плагинов можно посетить Clearfy Pro на WPSHOP.
Дополнительные советы по работе с шорткодами
Создание безопасных шорткодов с проверкой
Чтобы минимизировать появление неработающих шорткодов, при разработке собственных шорткодов рекомендуется добавлять проверку существования функции и корректно регистрировать шорткод. Например:
function wpacademy_register_my_shortcode() {
add_shortcode('myshortcode', 'wpacademy_handle_my_shortcode');
}
add_action('init', 'wpacademy_register_my_shortcode');
function wpacademy_handle_my_shortcode($atts, $content = null) {
if (!function_exists('some_required_function')) {
return '';// Возвращаем пустую строку, если что-то отсутствует
}
// Логика шорткода
return '<div>Пример шорткода</div>';
}Регулярный аудит контента
Периодически проверяйте сайт на наличие неработающих шорткодов, особенно после удаления плагинов. Для этого можно использовать WP-CLI команду wp post list --field=ID и выполнять скрипт очистки в автоматическом режиме.
Резервное копирование перед изменениями
Любые операции с базой данных требуют резервного копирования. Для автоматизации бэкапов можно использовать плагин BackupMaster.
Выводы
Автоматизация удаления неработающих шорткодов позволяет содержать сайт на WordPress в чистоте и порядке, улучшает пользовательский опыт и снижает нагрузку на поддержку. Используя приведённые примеры кода и рекомендации по плагинам, вы сможете легко реализовать эту задачу на своём проекте.