Диагностика проблемы с пустыми текстами и блоками в WordPress
Пустые тексты и пустые блоки (например, пустые параграфы или дивы) часто появляются после копипаста, при использовании визуальных редакторов (Gutenberg), или при импорте контента. Они замедляют загрузку страницы, создают лишние пробелы и могут влиять на SEO. Чтобы понять масштаб проблемы, откройте исходный код страницы (Ctrl+U) и поищите пустые теги, такие как <p></p> или <div></div> без содержимого.
Как определить, что пустые блоки действительно мешают
- Проверьте страницу через инструменты разработчика в браузере (F12) — пустые блоки занимают место в DOM, хотя визуально их может не быть.
- Используйте поиск по коду <p></p> или <div></div>.
- Проанализируйте страницу через PageSpeed Insights — пустые теги могут быть отмечены как избыточный HTML.
Пошаговое решение: удаление пустых блоков и пустых текстов с помощью кода
Для удаления пустых HTML-тегов из вывода контента без плагинов можно использовать фильтр the_content. Пример функции, которая удаляет пустые параграфы и дивы из содержимого поста:
function wpdream_remove_empty_tags($content) {
// Удаляем пустые <p> и <div>, которые не содержат текста или других тегов
$content = preg_replace('/<(p|div)>\s*<\/\1>/i', '', $content);
// Удаляем <p> с пробелами и
$content = preg_replace('/<p>( |\s)*<\/p>/i', '', $content);
return $content;
}
add_filter('the_content', 'wpdream_remove_empty_tags');Если пустые блоки появляются в других местах, например, в виджетах или в произвольном выводе, то нужно аналогично фильтровать соответствующие хуки.
Удаление пустых блоков из контента Gutenberg
Gutenberg иногда создаёт пустые параграфы. Чтобы избавиться от них на уровне редактора, можно добавить следующий JavaScript в админку (через enqueue script):
wp.domReady(() => {
wp.data.subscribe(() => {
const blocks = wp.data.select('core/block-editor').getBlocks();
blocks.forEach(block => {
if (block.name === 'core/paragraph' && !block.attributes.content.trim()) {
wp.data.dispatch('core/block-editor').removeBlock(block.clientId);
}
});
});
});Этот код автоматически удалит пустые параграфы при работе в редакторе.
Проверка результата после внедрения
- Очистите кеш сайта и браузера.
- Откройте страницу с ранее пустыми блоками, проверьте исходный код (Ctrl+U) — пустые <p> и <div> должны исчезнуть.
- В инструментах разработчика проверьте, что DOM не содержит пустых тегов.
- Проверьте визуальное отображение страницы — лишние пробелы и пустые места должны исчезнуть.
Частые ошибки и как их исправить
- Неправильное регулярное выражение: если regexp слишком широкое, может удалить нужные теги. Проверяйте на тестовом контенте.
- Удаление содержимого с пробелами: пробельные символы и нужно учитывать, иначе пустые теги не удалятся.
- Пустые блоки не удаляются из кода темы: возможно, нужно фильтровать не только
the_content, а и другие хуки (например, вывод виджетов). - JavaScript для редактора не подключён: убедитесь, что скрипт загружается только в админке.
Практические советы по безопасности и производительности
- Используйте фильтр
the_contentаккуратно — слишком сложные регулярки могут замедлять рендеринг страниц. - Проверяйте регулярные выражения на корректность и производительность.
- Резервируйте копии функций и контента перед применением фильтров, чтобы избежать потери данных.
- Для больших сайтов с многотысячным контентом лучше оптимизировать контент заранее — например, скриптами на этапе импорта.
Сравнение методов удаления пустых блоков
| Метод | Плюсы | Минусы |
|---|---|---|
| PHP-фильтр the_content | Просто реализовать, работает с контентом поста | Не удаляет пустые блоки в других местах (виджеты, темы) |
| JavaScript в редакторе Gutenberg | Удаляет пустые блоки на этапе редактирования | Требует подключения скрипта, не влияет на фронтенд напрямую |
| Ручное редактирование контента | Полный контроль над содержимым | Долго и неудобно при большом объёме |