Шорткоды — мощный инструмент WordPress, который позволяет добавлять на страницы и записи различные функциональные элементы без знания программирования. Однако со временем на сайте может накопиться большое количество неиспользуемых шорткодов, которые замусоривают контент и могут влиять на производительность. В этой статье мы подробно разберем, как найти и удалить неиспользуемые шорткоды в WordPress без установки дополнительных плагинов.
Почему важно удалять неиспользуемые шорткоды
Со временем сайт на WordPress может содержать старые шорткоды, которые больше не поддерживаются темами или плагинами, либо просто перестали использоваться в контенте. Это приводит к следующим проблемам:
- Появление на страницах непонятных коротких записей в виде текста вида
[example_shortcode], что портит внешний вид сайта. - Увеличение нагрузки на базу данных и обработку контента, так как WordPress обрабатывает эти шорткоды при загрузке страниц.
- Потенциальные конфликты и ошибки, если шорткод был зарегистрирован плагином, который больше не активен.
Поэтому регулярная очистка от неиспользуемых шорткодов — обязательная часть поддержки сайта.
Как определить неиспользуемые шорткоды в базе данных
Первый этап — узнать, какие шорткоды вообще зарегистрированы на сайте, и какие из них используются в контенте. Для этого можно написать функцию, которая выведет список всех зарегистрированных шорткодов и проверит их наличие в записях.
Пример функции для вывода зарегистрированных шорткодов с проверкой их использования:
function wpclean_list_unused_shortcodes() {
global $shortcode_tags;
$unused = [];
foreach( $shortcode_tags as $shortcode => $func ) {
$count = 0;
$args = [
'post_type' => 'any',
'posts_per_page' => -1,
's' => '[' . $shortcode,
'fields' => 'ids',
];
$query = new WP_Query( $args );
$count = $query->found_posts;
if ( $count === 0 ) {
$unused[] = $shortcode;
}
}
return $unused;
}
// Использование функции
$unused_shortcodes = wpclean_list_unused_shortcodes();
if ( ! empty( $unused_shortcodes ) ) {
echo 'Неиспользуемые шорткоды: ' . implode( ', ', $unused_shortcodes );
} else {
echo 'Все шорткоды используются.';
}Эта функция ищет в базе записей, страниц и других типах постов наличие шорткодов по шаблону [shortcode. Если шорткод не найден, он добавляется в список неиспользуемых.
Удаление неиспользуемых шорткодов из контента
Если в контенте остались неиспользуемые шорткоды, которые отображаются как текст, их можно удалить массово с помощью SQL-запроса или через PHP с использованием регулярных выражений.
Удаление через SQL-запрос
Пример запроса для удаления шорткода [example_shortcode] из всех записей:
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(post_content, '\[example_shortcode[^\]]*\]', '')
WHERE post_content LIKE '%[example_shortcode%';Обратите внимание, что функция REGEXP_REPLACE доступна в MySQL 8.0+. Для более старых версий придется использовать сложные обходные решения.
Удаление через PHP и WP-CLI
Можно написать скрипт, который переберет все записи и удалит шорткод из контента:
function wpclean_remove_shortcode_from_posts( $shortcode ) {
$args = [
'post_type' => 'any',
'posts_per_page' => -1,
's' => '[' . $shortcode,
'fields' => 'ids',
];
$query = new WP_Query( $args );
foreach ( $query->posts as $post_id ) {
$post = get_post( $post_id );
$content = $post->post_content;
// Регулярное выражение для удаления шорткода со всеми параметрами
$pattern = '/\[' . preg_quote($shortcode, '/') . '(\s[^\]]*)?\]/';
$new_content = preg_replace($pattern, '', $content);
if ( $new_content !== $content ) {
wp_update_post([
'ID' => $post_id,
'post_content' => $new_content
]);
}
}
}
// Пример вызова
wpclean_remove_shortcode_from_posts('example_shortcode');Такой скрипт можно запустить один раз, например через файл в корне сайта или WP-CLI команду.
Деактивация неиспользуемых шорткодов программно
Если шорткод больше не нужен и нет планов его использовать, можно полностью удалить его регистрацию, чтобы избежать конфликтов.
Для этого используется функция remove_shortcode( 'shortcode_name' ). Пример:
function wpclean_unregister_unused_shortcodes() {
$unused_shortcodes = wpclean_list_unused_shortcodes();
foreach ( $unused_shortcodes as $shortcode ) {
remove_shortcode( $shortcode );
}
}
add_action('init', 'wpclean_unregister_unused_shortcodes');Это гарантирует, что WordPress не будет пытаться обработать эти шорткоды, а они не будут выводиться в виде текста.
Плагины для управления шорткодами
Хотя в статье мы ориентировались на решения без плагинов, иногда удобно использовать специализированные инструменты. Например, плагин Shortcode Cleaner Lite позволит быстро искать и удалять шорткоды из контента.
Если хотите более комплексное управление, обратите внимание на плагин Clearfy Pro, который содержит инструменты оптимизации и очистки WordPress, включая работу с шорткодами.