显示不同风格的帖子列表

时间:2019-02-11 作者:Kevin

我要将我的引导模板转换为自定义Wordpress主题,但有一个小问题。

我想显示我所有的博客帖子。到目前为止,它运行良好。但问题是:由于我的设计偏好,我想在特定帖子之后更改所显示帖子的使用样式。比如说,对于前三篇文章,我想使用样式A(文章显示在一个带有标题和摘录的大框中),第三篇之后,我想显示以下带有样式B的文章(每行两篇,较小的框,只有图像和标题,没有摘录)。

我刚刚开始使用WP语法,所以我不知道如何实现这一点。有什么建议吗?

谢谢

EDIT

这是我当前使用的代码

<?php
  $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;

  $args = array(
    \'post-type\' => \'post\',
    \'post-per-page\' => 8,
    \'paged\' => $paged,
  );

  $wp_query = new WP_Query($args);

  if ($wp_query->have_posts()) : while ($wp_query->have_posts()) : $wp_query->the_post();
  ?>
  <article class="single-post">
    <div class="post-thumbnail">
      <a href="<?php the_permalink(); ?>">
        <img src="<?php echo get_template_directory_uri(); ?>/images/example.jpg">
      </a>
    </div>
    <div class="post-content">
      <div class="content-header">
        <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
      </div>
      <div class="content-text">
        <?php the_excerpt(); ?>
      </div>
      <div class="read-more">
        <a href="<?php the_permalink(); ?>">Read More</a>
      </div>
    </div>
  </article>
  <?php endwhile; else: ?>
    <p>Sorry, no posts yet.</p>
  <?php endif; ?>
这将产生一个我当前帖子的列表,风格都是一样的。正如我所说,我真的想在第三篇文章之后改变风格。在我当前的引导代码中,如下所示:

<article class="single-post">
  // all the stuff above
</article>
<div class="row"> <!-- a new row for smaller post boxes -->
  <div class="col-sm-6"> <!-- first box -->
    <article class="multiple-post">
      // all the stuff here
    </article>
  </div>
  <div class="col-sm-6"> <!-- second box -->
    <article class="multiple-post">
      // all the stuff here
    </article>
  </div>
 </div>
因此,我希望在前3篇左右的博客文章中使用带有类single post的文章,之后,页面应该使用带有类multiple post的文章,包括额外的div行。否则,由于引导程序的工作方式,我无法使用确切的布局。

希望这能让你更清楚。

2 个回复
SO网友:Alexander Holsgrove

您只需设置一个变量来计算循环迭代次数,然后根据值应用不同的样式或输出。例如:

$post_index = 1;

/* Start the Loop */
while ( have_posts() ) :
    the_post();

    $post_class = ($post_index > 3 ? \'style-a col-sm-12\' : \'style-b col-sm-6\');

    echo \'<div class="\' . $post_class . \'">\';

    // Both post types use the title
    echo \'<h2>\' . the_title() . \'</h2>\';

    if($post_index <= 3) {
        // Style A - Title and Excerpt
        the_excerpt();
    } else {
        // Style B - Title and Image
        the_post_thumbnail(\'thumbnail\');
    }
    echo \'</div>\';

    $post_index++;

endwhile; // End of the loop.
未经测试,但这为您提供了总体思路。

SO网友:Krzysiek Dróżdż

好的,下面是更改后的代码:

<?php
    $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;

    $args = array(
        \'post_type\' => \'post\',
        \'posts_per_page\' => 8,
        \'paged\' => $paged,
    );

    $wp_query = new WP_Query( $args );

    if ( $wp_query->have_posts() ) : 
?>

    <?php if ( 1 == $paged ) : // <- remove this if, if the layout should be the same for all pages ?>
    <?php while ( $wp_query->have_posts() && $wp_query->current_post < 3 ) : $wp_query->the_post(); // print first 3 posts ?>
    <article class="single-post">
        <div class="post-thumbnail">
            <a href="<?php the_permalink(); ?>">
                <img src="<?php echo get_template_directory_uri(); ?>/images/example.jpg">
            </a>
        </div>
        <div class="post-content">
            <div class="content-header">
                <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            </div>
            <div class="content-text">
                <?php the_excerpt(); ?>
            </div>
            <div class="read-more">
                <a href="<?php the_permalink(); ?>">Read More</a>
            </div>
        </div>
    </article>
    <?php endwhile; ?>
    <?php endif; // <- remove this endif, if the layout should be the same for all pages ?>

    <?php if ( $wp_query->have_posts() ) : // if there were more than 3 posts found ?>
    <div class="row"> <!-- a new row for smaller post boxes -->

        <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); // display smaller posts ?>
        <div class="col-sm-6"> <!-- first box -->
            <article class="multiple-post">
                // all the stuff here
            </article>
        </div>
        <?php endwhile; ?>

    </div><!-- .row -->
    <?php endif; ?>

<?php else : // if no posts found ?>
    <p>Sorry, no posts yet.</p>
<?php endif; ?>
如果你使用这个代码,那么前3篇文章只会在第一页上更大。如果要在所有页面上显示相同的布局,则必须删除if 声明-我已经在评论中标记了它。

顺便说一句,使用$wp_query 用于自定义查询的变量不是最好的主意。。。

相关推荐

Separate First Post Loop

我正在尝试使用<?php rewind_posts(); ?> 在我的主页模板上使用两个循环的功能。有人知道如何停止最新帖子后的第一个循环吗?这是我的代码:<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <h1><a href=\"<?php the_permalink(); ?>\"><