Пустые страницы на сайте WordPress могут возникать по разным причинам: ошибки при создании, импорт данных, неактуальный контент или сбои в работе шаблона. Они не только ухудшают пользовательский опыт, но и могут негативно влиять на SEO. В этой статье мы рассмотрим, как программно находить и удалять пустые страницы с помощью кода, не прибегая к плагинам. Это особенно полезно при необходимости массовой очистки или автоматизации.
Почему появляются пустые страницы в WordPress и как их обнаружить
Пустые страницы — это записи типа «page» в базе данных WordPress, у которых отсутствует содержимое, заголовок или и то, и другое. Иногда они могут иметь только метаданные, но не отображать никакой полезной информации. Причины возникновения:
- Ошибки пользователя при создании страниц.
- Импорт из сторонних систем с некорректными данными.
- Удаление контента из страниц, оставив пустой шаблон.
- Сбои при работе плагинов или тем.
Для обнаружения таких страниц можно использовать простой WP_Query по типу записи и проверку содержимого. Например, пустая страница — это запись с пустым полем post_content и, возможно, пустым post_title.
Пример запроса для поиска пустых страниц
$args = [
'post_type' => 'page',
'posts_per_page' => -1,
'post_status' => 'publish',
];
$query = new WP_Query($args);
foreach ($query->posts as $page) {
if (empty(trim($page->post_content)) && empty(trim($page->post_title))) {
// Страница пустая
}
}
Удаление пустых страниц: автоматизация с помощью функции WPLink_ru_delete_empty_pages
Для удобства можно создать функцию, которая находит и удаляет пустые страницы. Ниже пример такой функции с комментариями.
function wplink_ru_delete_empty_pages() {
$args = [
'post_type' => 'page',
'posts_per_page' => -1,
'post_status' => ['publish', 'draft', 'pending'],
];
$query = new WP_Query($args);
$deleted_count = 0;
foreach ($query->posts as $page) {
$content = trim(strip_tags($page->post_content));
$title = trim($page->post_title);
if (empty($content) && empty($title)) {
wp_delete_post($page->ID, true); // true — удаление без корзины
$deleted_count++;
}
}
return $deleted_count;
}
// Пример вызова функции
$removed = wplink_ru_delete_empty_pages();
echo "Удалено пустых страниц: " . $removed;
В этом коде мы используем wp_delete_post с параметром true, чтобы удалить страницы без возможности восстановления из корзины. Это подходит для массовой очистки.
Когда запускать удаление пустых страниц
Можно запускать функцию вручную в файле темы, плагина или через WP-CLI. Для автоматизации подойдёт хук по расписанию через WP Cron, например, раз в неделю. Это поможет поддерживать сайт в порядке без постоянного контроля.
Альтернативные способы: плагины для управления и очистки
Хотя мы рассмотрели кодовое решение, некоторые предпочитают использовать плагины. Например:
- Clearfy — популярный плагин для оптимизации и очистки WordPress, который помогает находить и удалять лишние страницы и посты.
- WPRemark — плагин для улучшения взаимодействия с пользователями, может помочь в выявлении неактивного и пустого контента.
Использование плагинов удобно, если вы не хотите писать код, но для точечной и быстрой очистки лучше всё же применять собственные скрипты.
Как предотвратить появление пустых страниц в будущем
Чтобы не столкнуться с проблемой пустых страниц снова, стоит:
- Добавить проверку при создании или сохранении страницы, например, с помощью хуков
save_post. - Использовать пользовательские типы записей с ограничениями.
- Проверять импортируемые данные перед загрузкой.
- Регулярно проводить аудит контента.
Пример простой проверки при сохранении страницы:
function wplink_ru_check_empty_page_before_save($post_id, $post, $update) {
if ($post->post_type !== 'page') {
return;
}
$content = trim(strip_tags($post->post_content));
$title = trim($post->post_title);
if (empty($content) && empty($title)) {
// Отправим уведомление или отменим сохранение
remove_action('save_post', 'wplink_ru_check_empty_page_before_save');
wp_delete_post($post_id, true);
}
}
add_action('save_post', 'wplink_ru_check_empty_page_before_save', 10, 3);
Этот код удалит пустые страницы сразу после сохранения, предотвращая их появление.