В процессе длительной работы с WordPress на вашем сайте может накопиться множество шорткодов, которые уже не используются, но продолжают вызывать ошибки или отображаться некорректно. Это особенно часто случается, если вы удаляли плагины или меняли тему, оставляя «мертвые» шорткоды в контенте. В этой статье подробно разберём, как безопасно и эффективно удалить неиспользуемые шорткоды в WordPress без установки дополнительных плагинов, используя только PHP и встроенные возможности платформы.
Почему важно удалить неиспользуемые шорткоды в WordPress
Когда шорткод остается в тексте, а соответствующая функция для него удалена или отключена, на сайте вместо содержимого выводится текст с шорткодом в квадратных скобках. Это портит внешний вид страницы и может негативно влиять на SEO. К тому же, такие ошибки увеличивают нагрузку на сайт, так как WordPress пытается обработать несуществующий код.
Регулярная очистка контента от неактуальных шорткодов повышает качество сайта и упрощает поддержку. Особенно это актуально для сайтов с большим объёмом контента и частой сменой плагинов.
Как найти все неиспользуемые шорткоды на сайте
Первым шагом необходимо выявить, какие именно шорткоды присутствуют в базе данных, но не зарегистрированы в коде. Для этого мы можем использовать SQL-запрос к таблице wp_posts, где хранятся все записи, страницы и другие типы контента. Пример запроса для поиска шорткодов в содержимом:
SELECT ID, post_title, post_content FROM wp_posts WHERE post_content REGEXP '\\[[a-zA-Z0-9_\-]+.*\\]';Этот запрос найдёт все записи с любыми шорткодами. Чтобы понять, какие из них «неизвестны», нужно получить список зарегистрированных шорткодов в WordPress с помощью PHP-функции:
function wpmart_get_registered_shortcodes() {
global $shortcode_tags;
return array_keys($shortcode_tags);
}После этого можно сопоставить шорткоды из базы с зарегистрированными и выявить неиспользуемые.
Автоматический сканер неиспользуемых шорткодов
Можно написать простой скрипт на PHP, который пройдётся по записям и покажет шорткоды, для которых нет обработчика:
function wpmart_find_unused_shortcodes() {
global $wpdb;
$posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_content REGEXP '\\[[a-zA-Z0-9_\\-]+.*\\]'");
$registered = array_keys($GLOBALS['shortcode_tags']);
$unused = [];
foreach ($posts as $post) {
preg_match_all('/\\[([a-zA-Z0-9_\\-]+)(\s|\\])/', $post->post_content, $matches);
foreach ($matches[1] as $code) {
if (!in_array($code, $registered)) {
$unused[$code][] = $post->ID;
}
}
}
return $unused;
}Вызов функции wpmart_find_unused_shortcodes() вернёт массив неиспользуемых шорткодов с ID постов, где они встречаются.
Как удалить неиспользуемые шорткоды из контента
После того, как список неиспользуемых шорткодов получен, можно приступить к их удалению напрямую из текста. Для этого лучше всего написать функцию, которая обработает все записи и заменит старые шорткоды на пустую строку или любой другой текст.
Пример функции для удаления конкретного шорткода:
function wpmart_remove_shortcode_from_content($content, $shortcode) {
// Шаблон для поиска шорткода с параметрами и без
$pattern = '\\[' . preg_quote($shortcode, '/') . '(\\s[^\\]]*)?\\](.*?)\\[\\/' . preg_quote($shortcode, '/') . '\\]|\\[' . preg_quote($shortcode, '/') . '(\\s[^\\]]*)?\\/]';
return preg_replace('/' . $pattern . '/s', '', $content);
}Для массового удаления всех неиспользуемых шорткодов можно использовать следующий алгоритм:
- Получить список неиспользуемых шорткодов с их постами.
- Для каждого поста загрузить содержимое, удалить все указанные шорткоды и обновить запись в базе.
Пример кода для массового удаления:
function wpmart_bulk_remove_unused_shortcodes() {
global $wpdb;
$unused = wpmart_find_unused_shortcodes();
foreach ($unused as $shortcode => $post_ids) {
foreach ($post_ids as $post_id) {
$post = get_post($post_id);
$new_content = wpmart_remove_shortcode_from_content($post->post_content, $shortcode);
if ($new_content !== $post->post_content) {
wp_update_post([
'ID' => $post_id,
'post_content' => $new_content
]);
}
}
}
}<Запуск wpmart_bulk_remove_unused_shortcodes() удалит все найденные неиспользуемые шорткоды из ваших записей.
Дополнительные советы по работе с шорткодами в WordPress
Использование плагина Clearfy Pro для управления шорткодами
Если вы хотите более удобный и визуальный способ управления шорткодами, можно использовать плагин Clearfy Pro. Он позволяет быстро отключать ненужные шорткоды и оптимизировать сайт, не прибегая к коду.
Резервное копирование перед массовыми изменениями
Перед автоматической очисткой контента обязательно сделайте резервную копию базы данных. Это позволит избежать потери данных в случае ошибки. Для резервного копирования подойдут плагины типа UpdraftPlus или встроенные инструменты хостинга.
Как зарегистрировать собственный пустой шорткод для безопасного удаления
Иногда можно временно зарегистрировать пустой обработчик шорткода, чтобы предотвратить вывод ошибки, а потом уже безопасно удалять его из контента.
add_shortcode('oldshortcode', function() {
return '';
});Это позволяет спокойно проверить, где используется шорткод, не ломая внешний вид сайта.
Заключение
Удаление неиспользуемых шорткодов — важная задача для поддержания чистоты и производительности вашего сайта на WordPress. Используя описанные методы, вы сможете быстро найти и убрать «мертвые» шорткоды без установки дополнительных плагинов. При необходимости можно расширить функционал с помощью плагинов, таких как Clearfy Pro, чтобы упростить управление.