Wordpress循环问题

时间:2013-04-09 14:27:27

标签: php html loops wordpress

在我网站的主页上,我希望最新的帖子最大,然后较旧的帖子要小一些,低于它。见图 enter image description here

我创建了一个wordpress循环,它部分完成了工作,我已经缩小了,所以你可以获得更清晰的视图。 enter image description here

<?php if (have_posts()): ?>

  <section class="latest-blog">
<?php query_posts('showposts=5'); ?>

<?php $i = 0; while (have_posts()) : the_post(); ?>

  <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <!-- Post Title -->
    <h1>
        <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
    </h1>
    <!-- /Post Title -->
    <?php html5wp_excerpt('html5wp_index'); // Build your custom callback length in functions.php ?>

        <br class="clear">

    <?php edit_post_link(); ?>

   </article>
 </section>

<section class="archive">
<?php if(++$i === 1):  ?>
<?php endif; ?>      

<?php endwhile; ?>
</section>    

<?php endif; ?>

似乎正在发生的事情是,每个旧帖子都会获得部分存档,因为我希望所有旧帖子都在部分存档中作为文章。

4 个答案:

答案 0 :(得分:2)

如果我理解你的问题,我认为你不需要多个循环,而我认为你可以在你的循环中使用一个“特殊”的情况来处理第一个最近的帖子,但是然后通常对待所有旧的帖子(看起来你正试图以相反的方式做到这一点?)。

这个怎么样:

  <?php 
  $firstPost = true; 
  query_posts('showposts=5');
  while (have_posts()) {
     the_post();
     if ($firstPost) {
       ?>
         <section class="latest-blog">
            my_article();
         </section><!-- /latest-blog -->

         <section class="archive">

     <?php 
       $firstPost = false;
     } // end of if(firstPost)
     ?>

     my_article();

   <?php
   } // end of the loop
   ?>

</section><!-- /archive -->

<?php
function my_article() {
   ?>
   <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
      <!-- Post Title -->
        <h1><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h1>
      <!-- /Post Title -->
      <?php html5wp_excerpt('html5wp_index'); // Build your custom callback length in functions.php ?>
      <br class="clear"> 
      <?php edit_post_link(); ?>  
   </article>
   <?php
}
?>

如果从数据的角度来看,这些帖子都是相同的,我没有理由想要执行单独的查询来检索它们。只是呈现第一个不同的。这样做可以减少您的代码,这意味着减少错误的位置,并减少数据库开销,这意味着更好的网站。

另请注意,codex for query_posts()表明这不是一种有效的方法来做你正在做的事情。因此,一旦您按原样运行,您可能需要调查WP推荐的使用pre_get_posts操作的方法,尽管在这是“页面”的情况下可能不适用/适用。

答案 1 :(得分:1)

将代码分成2个循环。

精选帖子的第一个循环:

<?php query_posts('showposts=1'); ?>
<section class="latest-blog">
<?php $i = 0; while (have_posts()) : the_post(); ?>
  <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <!-- Post Title -->
    <h1>
        <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
    </h1>
    <!-- /Post Title -->
    <?php html5wp_excerpt('html5wp_index'); // Build your custom callback length in functions.php ?>

        <br class="clear">

    <?php edit_post_link(); ?>

   </article>
<?php endwhile; ?>
</section>

其余帖子的第二个循环:

<?php wp_reset_query(); ?>
<?php query_posts('showposts=5&offset=1'); ?>
<section class="archive">
<?php $i = 0; while (have_posts()) : the_post(); ?>
  <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <!-- Post Title -->
    <h1>
        <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
    </h1>
    <!-- /Post Title -->
    <?php html5wp_excerpt('html5wp_index'); // Build your custom callback length in functions.php ?>

        <br class="clear">

    <?php edit_post_link(); ?>

   </article>
   <?php endwhile; ?>
</section>

您会注意到我们在查询中使用offset = 1来偏移第二个循环中的第一个帖子(因此它不会出现两次)。

您的最终代码如下所示:

<?php if (have_posts()): ?>
<?php query_posts('showposts=1'); ?>
<section class="latest-blog">
<?php $i = 0; while (have_posts()) : the_post(); ?>
  <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <!-- Post Title -->
    <h1>
        <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
    </h1>
    <!-- /Post Title -->
    <?php html5wp_excerpt('html5wp_index'); // Build your custom callback length in functions.php ?>

        <br class="clear">

    <?php edit_post_link(); ?>

   </article>
<?php endwhile; ?>
</section>

<?php wp_reset_query(); ?>
<?php query_posts('showposts=5&offset=1'); ?>
<section class="archive">
<?php $i = 0; while (have_posts()) : the_post(); ?>
  <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <!-- Post Title -->
    <h1>
        <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
    </h1>
    <!-- /Post Title -->
    <?php html5wp_excerpt('html5wp_index'); // Build your custom callback length in functions.php ?>

        <br class="clear">

    <?php edit_post_link(); ?>

   </article>
   <?php endwhile; ?>
</section>
<?php endif; ?>

答案 2 :(得分:0)

您需要运行2个循环,一个用于主要帖子,另一个用于存档帖子。你不能只把一个计数器放在中间,希望HTML能够神奇地自我格式化。

像这样的可能会工作。

<section class="latest-blog">
  <?php query_posts('showposts=1'); ?>

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

    <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <!-- Post Title -->
      <h1>
        <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
      </h1>
      <!-- /Post Title -->
      <?php html5wp_excerpt('html5wp_index'); // Build your custom callback length in functions.php ?>

      <br class="clear">

      <?php edit_post_link(); ?>

    </article>
  <?php endwhile; ?>
</section>

<section class="archive">
  <?php wp_reset_query(); ?>
  <?php query_posts('showposts=5&offset=1'); ?>
  <?php while (have_posts()) : the_post(); ?>
    <?php // code for "archived" post ?>
  <?php endwhile; ?>
</section>    

答案 3 :(得分:-1)

最好的办法是创建2个单独的循环,

顶部循环只带回1个帖子! 底部循环返回另外4个          

// The Loop
while ( have_posts() ) : the_post();
    echo '<li>';
    the_title();
    echo '</li>';
endwhile;

// Reset Query
wp_reset_query();
?>    
</div>
<div class="subTop">
<?php
query_posts( 'posts_per_page=4' );

// The Loop
while ( have_posts() ) : the_post();
    echo '<li>';
    the_title();
    echo '</li>';
endwhile;

// Reset Query
wp_reset_query();
?>   
</div>

希望这有助于

中号