2013-11-26 2 views
0

У меня проблема с отправкой сообщений на страницу. Я пытаюсь получить сообщения определенной категории, но когда сообщения загружаются, они отображаются 5 раз. Я уже попытался изменить количество сообщений для просмотра в панели администратора, но это не влияет на вывод сообщений.Query posts выводит новости 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 --> 

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

+0

Вы должны использовать один 'WP_Query' для этого, а не' 'query_posts' и get_posts'. 'get_posts' не требует использования Loop. Здесь вы изменяете запрос по умолчанию, зацикливая эти сообщения ('while'), и внутри каждого цикла работает ANOTHER' foreach' loop, который выводит каждый пост, поэтому вы получаете такое поведение. Просто используйте свежий 'WP_Query' и простой, обычный цикл WordPress, чтобы сделать это вместо этого. – Ennui

+0

См. Мой ответ для реализации с 'WP_Query'. – Ennui

ответ

1

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

<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 --> 

0

Try:

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

$ myposts = get_posts ($ args);

И удалить:

время (have_posts()): the_post(); ?>

endwhile;

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

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

1

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

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

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

<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 -->