Решение проблемы с выводом сообщения при отсутствии постов в 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), которая корректно определяет пустой массив
  • Структура кода стала более логичной и читаемой
  • Сообщение "Здесь пока ничего нет" теперь гарантированно появляется при отсутствии записей

Это решение обеспечивает предсказуемое поведение шаблона в обоих сценариях: как при наличии постов, так и при их отсутствии.