0

在我网站的主页上,我希望最新的帖子最大,然后旧的帖子更小并低于它。看图片 在此处输入图像描述

我创建了一个 wordpress 循环,它部分完成了这项工作,我缩小了,这样你就可以获得更清晰的视图。 在此处输入图像描述

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

4 回答 4

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

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

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

于 2013-04-09T14:43:43.850 回答
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; ?>
于 2013-04-09T14:43:54.320 回答
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>    
于 2013-04-09T14:39:19.643 回答
-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>

希望这会有所帮助

于 2013-04-09T14:39:02.223 回答