Шорткоды в WordPress — удобный инструмент для быстрого добавления функционала в страницы и записи. Однако со временем на сайте может накопиться множество неиспользуемых или устаревших шорткодов. Они не только загромождают базу данных, но и могут вызывать ошибки или нежелательное отображение текста в виде [shortcode]. В этой статье разберем, как найти и удалить неиспользуемые шорткоды в WordPress, чтобы сохранить производительность и чистоту кода.
Почему важно удалять неиспользуемые шорткоды в WordPress
Со временем на сайте появляются шорткоды от удалённых плагинов, тем или устаревших функций. Если шорткод не зарегистрирован, WordPress просто выводит его в тексте, что портит внешний вид сайта. Кроме того, большое количество лишних шорткодов может негативно влиять на SEO и скорость загрузки страниц.
Удаление неиспользуемых шорткодов помогает:
- Избавиться от ошибок и некорректного отображения контента
- Улучшить производительность сайта
- Сделать код сайта более чистым и поддерживаемым
- Улучшить опыт пользователей и администраторов
Как найти неиспользуемые шорткоды на сайте
Прежде чем удалять шорткоды, нужно понять, какие из них не используются. Для этого можно сделать следующее:
Поиск по базе данных
Все шорткоды находятся внутри контента постов и страниц, хранящихся в таблице wp_posts в поле post_content. Можно выполнить SQL-запрос с поиском по шаблону [название_шорткода]. Например, чтобы найти все публикации с шорткодом [myshortcode], используйте:
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%[myshortcode%';Такой запрос поможет понять, используется ли конкретный шорткод на сайте.
Сканирование всех шорткодов с помощью PHP
Если вы не знаете все имена шорткодов, можно написать функцию, которая переберёт все зарегистрированные шорткоды и проверит их наличие в контенте:
function wplock_check_unused_shortcodes() {
global $wpdb;
$shortcodes = array_keys($GLOBALS['shortcode_tags']);
$unused = [];
foreach ($shortcodes as $shortcode) {
$count = $wpdb->get_var(
$wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like('[' . $shortcode) . '%'
)
);
if (!$count) {
$unused[] = $shortcode;
}
}
return $unused;
}
// Использование:
$unused_shortcodes = wplock_check_unused_shortcodes();
print_r($unused_shortcodes);Эта функция вернёт список зарегистрированных шорткодов, которые не найдены ни в одной записи.
Удаление неиспользуемых шорткодов
Удалять шорткоды нужно аккуратно, чтобы не сломать функционал сайта. Если шорткод зарегистрирован, но не используется, можно просто деактивировать его регистрацию.
Удаление регистрации шорткода
Для этого используется функция remove_shortcode. Например, чтобы удалить шорткод [myshortcode] из списка зарегистрированных:
function wplock_remove_unused_shortcode() {
remove_shortcode('myshortcode');
}
add_action('init', 'wplock_remove_unused_shortcode');После этого шорткод перестанет работать и не будет отображаться в виде текста, если он случайно остался в контенте.
Автоматическая замена нераспознанных шорткодов
Если вы хотите автоматически удалять нераспознанные шорткоды из контента, можно использовать фильтр the_content с регулярным выражением, которое удалит все неизвестные шорткоды:
function wplock_strip_unknown_shortcodes($content) {
global $shortcode_tags;
// Получаем список зарегистрированных шорткодов
$registered = array_keys($shortcode_tags);
// Регулярное выражение для поиска всех шорткодов
return preg_replace_callback(
'/\[(\[?)([a-zA-Z0-9_-]+)(?![\w-])([^\]\/]*(?:\/(?!\])[^\]\/]*)*?)(?:(\/))?\](?:([^\[]*?)\[\/\2\])?(\]?)/',
function($matches) use ($registered) {
if (in_array($matches[2], $registered)) {
// Шорткод зарегистрирован - оставляем как есть
return $matches[0];
} else {
// Шорткод не зарегистрирован - удаляем
return '';
}
},
$content
);
}
add_filter('the_content', 'wplock_strip_unknown_shortcodes');Этот код удалит из вывода все шорткоды, которые не зарегистрированы в системе, что улучшит внешний вид страниц.
Полезные плагины для работы с шорткодами
Если не хочется писать код самостоятельно, можно использовать плагины для управления шорткодами:
- Shortcodes Cleaner — ищет и удаляет неиспользуемые шорткоды из контента.
- Shortcode Manager — позволяет управлять списком зарегистрированных шорткодов, отключать ненужные.
- Clearfy Pro — помогает оптимизировать сайт, в том числе отключая неиспользуемые шорткоды и функции. Подробнее на wpshop.ru.
Как предотвратить накопление неиспользуемых шорткодов в будущем
Чтобы избежать проблем с неиспользуемыми шорткодами, придерживайтесь простых правил:
- Перед удалением плагина отключайте и удаляйте все шорткоды, связанные с ним.
- Используйте специализированные плагины или скрипты для мониторинга шорткодов на сайте.
- Регулярно делайте аудит контента на предмет устаревших шорткодов.
- Внедряйте централизованное управление шорткодами, например, с помощью собственного плагина.
Для централизованного управления можно создать простой плагин, который будет регистрировать и хранить все шорткоды в одном месте, а также предоставлять инструменты для их поиска и удаления.
Пример простого плагина для удаления неиспользуемого шорткода
Ниже пример минимального плагина, который удаляет регистрацию шорткода [example] если он больше не используется:
<?php
/**
* Plugin Name: WPLOCK Remove Unused Shortcode
* Description: Удаляет шорткод [example], если он не найден в контенте
* Version: 1.0
* Author: WPLOCK
*/
function wplock_remove_example_shortcode_if_unused() {
global $wpdb;
$shortcode = 'example';
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like('[' . $shortcode) . '%'
));
if (!$count) {
remove_shortcode($shortcode);
}
}
add_action('init', 'wplock_remove_example_shortcode_if_unused');
?>Этот плагин проверяет наличие шорткода в базе и удаляет его из реестра, если он не используется. Аналогично можно настроить и для других шорткодов.