Решение проблемы с выводом сообщения при отсутствии постов в WordPress
При разработке шаблона для WordPress возникла проблема: посты на страницу добавляются корректно, однако при их полном отсутствии не отображается соответствующее уведомительное сообщение для пользователя.
Исходный код с ошибкой
В исходной реализации проверка условия if ( $posts ) выполняется некорректно для данной задачи. Код выводит список постов, но логика обработки пустого состояния работает не так, как ожидалось.
Анализ проблемы
Основная причина заключается в том, что переменная $posts, вероятно, всегда содержит какое-то значение (например, пустой массив или результат запроса), поэтому условие else никогда не выполняется. Необходимо проверять не просто существование переменной, а наличие в ней реальных записей.
Исправленное решение
Для корректной работы нужно модифицировать проверку следующим образом:
- Выполнять запрос к базе данных для получения постов
- Проверять результат запроса на наличие элементов
- Выводить либо список постов, либо сообщение об их отсутствии
Вот исправленная версия кода:
<ul class="article__list">
<?php
global $post;
$myposts = get_posts([
'posts_per_page' => -1,
'offset' => 4
]);
if (!empty($myposts)) {
foreach($myposts as $post) {
setup_postdata($post);
?>
<li><a class="article__link" href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
}
} else {
?>
<h2 class="no-articles">Здесь пока ничего нет.</h2>
<?php
}
wp_reset_postdata();
?>
</ul>Ключевые изменения
- Запрос постов вынесен за пределы условия
- Проверка выполняется функцией
!empty($myposts), которая корректно определяет пустой массив - Структура кода стала более логичной и читаемой
- Сообщение "Здесь пока ничего нет" теперь гарантированно появляется при отсутствии записей
Это решение обеспечивает предсказуемое поведение шаблона в обоих сценариях: как при наличии постов, так и при их отсутствии.