В процессе разработки и настройки сайта на WordPress часто встречается проблема с появлением пустых шорткодов, которые не дают желаемого результата, а только загромождают контент и могут влиять на отображение страниц. Такие пустые шорткоды появляются из-за неправильной работы плагинов, удаления плагинов без очистки контента или ошибок в коде. В этой статье разберём, как выявлять и удалять пустые шорткоды программно и с помощью плагинов, а также рассмотрим рекомендации по предотвращению их появления.
Что такое пустые шорткоды и почему они появляются в WordPress
Шорткоды — это специальные теги в квадратных скобках, которые WordPress заменяет на динамический контент. Например, [gallery] или [contact-form-7 id="123"]. Когда шорткод не обрабатывается плагином или имеет пустое содержимое, в тексте могут появляться пустые или некорректные теги, которые портят внешний вид и структуру страницы.
Основные причины появления пустых шорткодов:
- Удалён плагин, который отвечал за обработку шорткода, а в контенте остались его теги.
- Шорткод вызывается без необходимых параметров или с пустыми значениями.
- Ошибка в коде плагина, из-за которой не генерируется контент.
Удаление или корректировка таких шорткодов улучшит качество контента и снизит нагрузку на сайт.
Автоматическое удаление пустых шорткодов с помощью кода
Для очистки контента от пустых шорткодов можно написать фильтр, который будет проверять содержимое поста перед выводом и удалять шорткоды без содержимого.
Пример функции wponline_remove_empty_shortcodes, которая удаляет пустые шорткоды:
function wponline_remove_empty_shortcodes($content) {
// Найдем все шорткоды в контенте
preg_match_all('/\[(\w+)([^\]]*)\](?:([^\[]*?)\[\/\1\])?/', $content, $matches, PREG_SET_ORDER);
foreach ($matches as $shortcode) {
$full_shortcode = $shortcode[0];
$tag = $shortcode[1];
$inner_content = isset($shortcode[3]) ? trim($shortcode[3]) : '';
// Если шорткод пустой (нет внутреннего контента и нет атрибутов)
if ($inner_content === '' && trim($shortcode[2]) === '') {
$content = str_replace($full_shortcode, '', $content);
}
}
return $content;
}
add_filter('the_content', 'wponline_remove_empty_shortcodes');Этот код автоматически удалит все пустые шорткоды без параметров и содержимого из текста поста при его выводе на сайт. Если шорткод содержит параметры, но не выводит контент, его можно отфильтровать дополнительно, расширив логику.
Как подключить этот код в WordPress
Лучше всего разместить функцию в файле functions.php вашей темы или в отдельном плагине для пользовательских функций. Это позволит сохранить изменения при обновлении темы. Если вы используете дочернюю тему, код можно добавить туда.
Использование плагинов для поиска и удаления пустых шорткодов
Если вы не хотите писать код, можно использовать готовые плагины, которые помогут найти и почистить пустые шорткоды в базе данных и контенте:
- Shortcode Cleaner Lite — простой плагин для удаления неработающих или пустых шорткодов из постов и страниц.
- Remove Orphan Shortcodes — позволяет сканировать контент и удалять шорткоды, которые не обрабатываются установленными плагинами.
Оба плагина доступны на официальном репозитории WordPress и помогают быстро решить проблему без написания кода. Однако они не всегда идеально работают с кастомными шорткодами, тогда лучше использовать программный подход.
Рекомендации по предотвращению появления пустых шорткодов
Чтобы не сталкиваться с проблемой пустых шорткодов в будущем, следуйте нескольким советам:
- Перед удалением плагина, который добавляет шорткоды, удаляйте или заменяйте эти шорткоды в контенте.
- Используйте проверенные и регулярно обновляемые плагины для шорткодов.
- При создании собственных шорткодов в коде всегда предусматривайте обработку пустых параметров и возвращайте пустую строку, если нет данных для вывода.
- Рассмотрите использование плагинов типа Clearfy Pro, которые помогают оптимизировать и чистить сайт от мусора, включая неиспользуемые шорткоды.
Пример создания надежного шорткода без пустого вывода
Чтобы ваш шорткод не создавал пустые теги, реализуйте функцию с проверкой параметров и выводом только при наличии данных:
function wponline_shortcode_example($atts) {
$atts = shortcode_atts(array(
'text' => '',
), $atts, 'wponline_example');
if (empty(trim($atts['text']))) {
// Возвращаем пустую строку, чтобы не выводить пустой шорткод
return '';
}
return '<div class="wponline-example">' . esc_html($atts['text']) . '</div>';
}
add_shortcode('wponline_example', 'wponline_shortcode_example');Такой подход гарантирует, что пустой шорткод не будет выводиться на страницу, что упрощает дальнейшую очистку и предотвращает появление пустых тегов.