Сообщения с запросом выводят новости 5 раз

У меня проблема с выводом сообщений на страницу. Я пытаюсь получить сообщения определенной категории, но когда сообщения загружаются, они отображаются 5 раз. Я уже пытался изменить количество сообщений для просмотра в панели администратора, но это не влияет на вывод сообщений.

Это мой код:

<div id="primary" class="content-area">
    <main id="main" class="site-main" role="main">

        <?php

        query_posts( array ( 'category_name' => 'nieuwsitem', 'posts_per_page' => 20 ) );

         while ( have_posts() ) : the_post(); ?>

        <?php $myposts = get_posts('');
              foreach($myposts as $post) :
              setup_postdata($post);
              ?>
                <div class="post-item">
                  <div class="thedate"><?php echo get_the_time('d/m/Y', $post->ID); ?></p></div>
                  <div class="post-info">
                    <h2 class="post-title">
                    <a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>">
                    <?php the_title(); ?>
                    </a>
                    </h2>
                  </div>
                  <div class="post-content">
                  <?php the_content(); ?>
                  </div>
                </div>
              <?php endforeach; wp_reset_postdata(); ?>

        <?php endwhile; // end of the loop. ?>

    </main><!-- #main -->
</div><!-- #primary -->

Заранее спасибо!


person Jannik    schedule 26.11.2013    source источник
comment
Вы должны использовать для этого один WP_Query, а не query_posts и get_posts. get_posts не требует использования цикла. Здесь вы изменяете запрос по умолчанию, перебирая эти сообщения (while), и внутри каждого цикла выполняется ДРУГОЙ цикл foreach, который выводит каждое сообщение, поэтому вы получаете такое поведение. Вместо этого используйте новый WP_Query и простой обычный цикл WordPress.   -  person Ennui    schedule 26.11.2013
comment
Смотрите мой ответ для реализации с WP_Query.   -  person Ennui    schedule 26.11.2013


Ответы (3)


Вы создали 2 петли. Удаление foreach части вашего кода должно исправить это:

<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">

    <?php

    query_posts( array ( 'category_name' => 'nieuwsitem', 'posts_per_page' => 20 ) );

     while ( have_posts() ) : the_post(); ?>

            <div class="post-item">
              <div class="thedate"><?php echo get_the_time('d/m/Y', $post->ID); ?></p></div>
              <div class="post-info">
                <h2 class="post-title">
                <a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>">
                <?php the_title(); ?>
                </a>
                </h2>
              </div>
              <div class="post-content">
              <?php the_content(); ?>
              </div>
            </div>

    <?php endwhile; // end of the loop. ?>

</main><!-- #main -->

person Koen de Bakker    schedule 26.11.2013

Это правильный способ сделать это. Вам следует избегать использования query_posts и get_posts в большинстве ситуаций, а WP_Query здесь гораздо уместнее.

Причина, по которой вы получаете несколько копий каждого сообщения, заключается в том, что вы изменяете основной запрос, чтобы получать сообщения из этой категории, а затем внутри цикла вы get_posts из этого запроса и отображаете их все через foreach, поэтому вы выводите каждое сообщение в этой категории. для каждого сообщения в этой категории из-за вложенных циклов. get_posts не используется в сочетании с циклом.

Это должно сделать это за вас:

<div id="primary" class="content-area">
    <main id="main" class="site-main" role="main">

        <?php

        $catquery = new WP_Query('category_name=nieuwsitem&posts_per_page=20');
        if ($catquery->have_posts()) :
        while ( $catquery->have_posts() ) : $catquery->the_post(); ?>

                <div class="post-item">
                  <div class="thedate"><?php echo get_the_time('d/m/Y', $post->ID); ?></p></div>
                  <div class="post-info">
                    <h2 class="post-title">
                    <a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>">
                    <?php the_title(); ?>
                    </a>
                    </h2>
                  </div>
                  <div class="post-content">
                  <?php the_content(); ?>
                  </div>
                </div>
        <?php endwhile; // end of the loop. 
        else :
            echo '<h3>No posts found.</h3>';
        endif; ?>

    </main><!-- #main -->
</div><!-- #primary -->
person Ennui    schedule 26.11.2013

Попробуйте:

массив $args ('category_name' => 'nieuwsitem', 'posts_per_page' => 20);

$myposts = get_posts($args);

И удалите :

в то время как ( have_posts() ): the_post(); ?>

конец;

Я думаю, что вы запрашиваете свой пост с помощью двух запросов, поэтому каждый раз, когда вы получаете сообщение с помощью: while ( have_posts() ): the_post();

Вы снова запрашиваете сообщения с помощью: $myposts = get_posts('');

person Phil.C.    schedule 26.11.2013