Почему вместо перебора заголовков всех постов я получаю заголовок страницы?

Ссылка скопирована
1 ответ

Основное задание у меня было вывести все посты и инфу в них, но все посыпалось на заголовке. Этот код вместо заголовков всех постов выдает заголовок страницы.
Как это исправить?

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 	<?php the_title(); ?> 	<?php endwhile; else: ?> 		<?php the_title();  ?> 	<?php endif; ?>

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php the_title(); ?> <?php endwhile; else: ?> <?php the_title(); ?> <?php endif; ?>

Дополнительно:

Попробуй так
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php the_title(); ?>
<?php endwhile; else: ?>
Нет постов для отображения
<?php endif; ?>

  • А где выборка WP_Query для "всех постов"?
  • Почему вместо перебора заголовков всех постов я получаю заголовок страницы?

    Попробуйте так

    &lt;?php  $args = array(   'post_type' =&gt; 'post',   'posts_per_page' =&gt; -1 );  $query = new WP_Query( $args );  while ( $query-&gt;have_posts() ) {   $query-&gt;the_post();    the_title(); }  wp_reset_postdata();  ?&gt;

    &lt;?php $args = array( 'post_type' =&gt; 'post', 'posts_per_page' =&gt; -1 ); $query = new WP_Query( $args ); while ( $query-&gt;have_posts() ) { $query-&gt;the_post(); the_title(); } wp_reset_postdata(); ?&gt;

    Почему вместо перебора заголовков всех постов я получаю заголовок страницы?

    Цикл WordPress — универсальная штука, в зависимости от того какой раздел сайта вы просматриваете, та информация и будет подгружаться. Совершенно нормально если на обычный странице данный код выведет заголовок.

    В вашем случае, подозреваю, дело в настройках сайта — для главной страницы указана статическая страница, а не последние записи. Выберете настройку Выводить последние записи и цикл будет выдавать Заголовки последних N постов

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    WordPress-редакция Ответ

    Вы получаете заголовок страницы, потому что цикл have_posts() на обычной странице перебирает текущий основной запрос. Если открыта страница WordPress, основной запрос содержит именно эту страницу, а не все записи блога. Чтобы вывести все посты, нужно создать отдельный WP_Query.

    Пример:

    $posts_query = new WP_Query([
        'post_type'      =&gt; 'post',
        'posts_per_page' =&gt; -1,
        'post_status'    =&gt; 'publish',
    ]);
     
    if ($posts_query-&gt;have_posts()) {
        while ($posts_query-&gt;have_posts()) {
            $posts_query-&gt;the_post();
            echo '&lt;h2&gt;' . esc_html(get_the_title()) . '&lt;/h2&gt;';
        }
        wp_reset_postdata();
    } else {
        echo 'Нет постов для отображения';
    }

    $posts_query = new WP_Query([ 'post_type' =&gt; 'post', 'posts_per_page' =&gt; -1, 'post_status' =&gt; 'publish', ]); if ($posts_query-&gt;have_posts()) { while ($posts_query-&gt;have_posts()) { $posts_query-&gt;the_post(); echo '&lt;h2&gt;' . esc_html(get_the_title()) . '&lt;/h2&gt;'; } wp_reset_postdata(); } else { echo 'Нет постов для отображения'; }

    Ключевой момент — после кастомного запроса вызвать wp_reset_postdata(). Иначе дальше по шаблону WordPress может начать выводить данные не той записи.

    Ваш текущий код:

    if (have_posts()) {
        while (have_posts()) {
            the_post();
            the_title();
        }
    }

    if (have_posts()) { while (have_posts()) { the_post(); the_title(); } }

    не означает «все записи сайта». Он означает «все записи текущего запроса». На странице это одна page, в категории — записи категории, в поиске — результаты поиска, на главной блога — последние записи.

    Если нужно вывести записи определённой категории, добавьте параметр cat или category_name. Если нужно вывести кастомный тип записей, замените post_type. Не используйте query_posts() для такой задачи: он ломает основной запрос и пагинацию.

    Если такой блок стоит внутри шаблона страницы, не смешивайте основной Loop страницы и отдельный Loop записей. Сначала выведите контент страницы, затем отдельный WP_Query для постов. Так будет понятно, какой объект сейчас активен, и вы не получите случайно заголовок текущей страницы вместо нужных записей.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно