所以我在我的WP主题文件夹中编辑index.php,基本上我想要它做的是:
在博客的第一页上显示4篇帖子。
以不同方式为第一页上的第一个(最新)帖子设置样式。另外3个风格相同。
在每个其他分页页面上显示6个帖子。
这是我正在使用的循环,第一页看起来很好,但出于某种原因,第2页及更高版本的执行非常奇怪,并且在每个附加页面上仅显示一个帖子。此外,它只会显示标题,而不是日期或摘录。这是我的代码:
<?php
if( is_home() && !is_paged() ){
global $query_string;
parse_str( $query_string, $args );
$args['posts_per_page'] = 4;
query_posts($args);
if (have_posts()) :
while (have_posts()) : the_post();
if (++$counter == 1) { ?>
<div class="featured_post">
<p class="date"><?php the_date('M j, Y'); ?></p>
<a href="<?php the_permalink(); ?>"><h2><?php the_title(); ?></h2></a>
<a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('featuredblog'); ?></a>
<?php the_excerpt(); ?>
</div>
<?php } else { ?>
<div class="regular_post">
<p class="date"><?php the_date('M j, Y'); ?></p>
<div class="postimage"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('regularblog'); ?></a></div>
<a href="<?php the_permalink(); ?>"><h3><?php
// short_title($after, $length)
echo short_title('...', 7);
?></h3></a>
<?php the_excerpt(); ?>
</div>
<?php } ?>
<?php endwhile;
else :
// Code for no posts found here
endif;
} else {
global $query_string;
parse_str( $query_string, $args );
$args['posts_per_page'] = 6;
query_posts($args); ?>
<div class="regular_post">
<p class="date"><?php the_date('M j, Y'); ?></p>
<div class="postimage"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('regularblog'); ?></a></div>
<a href="<?php the_permalink(); ?>"><h3><?php the_title(); ?></h3></a>
<?php the_excerpt(); ?>
</div>
<?php } ?>
也许那里有太多if ... else语句?
答案 0 :(得分:1)
您使用的是某种框架吗?这是一个非常糟糕的tempalte引擎。
无论如何,如果你需要添加样式,你应该将作业留给CSS。
如果你需要极高的精确度,你可以留下一个带有计数器的类,用于你需要不同风格的每个元素。
喜欢<div class="Element<?php echo ++$counter; ?>"></div>
然后你可以在CSS中添加样式
.Element1,.Element2,.Element3 {styles}
.Element4 {other styles}
通过这种方式,您可以使用PHP代码简化生活
请记住,有一天您甚至不需要添加课程计数器。在不久的将来,您可以使用nth-child css selector
http://reference.sitepoint.com/css/pseudoclass-nthchild
编辑:该死的我回复了50%AR的人
答案 1 :(得分:1)
我的建议将遵循yes123,但真的把它全部留给css。基本上,你的所有帖子都应该包含在父div中,并且每个帖子应该以相同的方式分类。
<div id="content">
<div class="post">
<div class="title"></div>
</div>
<div class="post">
<div class="title"></div>
</div>
<div class="post">
<div class="title"></div>
</div>
<div class="post">
<div class="title"></div>
</div>
</div>
这是关于你应该解决的问题,显然在帖子中有更多的标签。
从那里开始,以不同方式设置第一个帖子的样式的方法是使用#content > .post:first-child
选择器。
另外,每页有不同数量的帖子可能不是一个好主意。我实际上从来没有真正尝试过,但我可以看到分页会搞砸了,你可能永远不会看到帖子5或6.我认为wordpress可能会说每页有6个帖子,第2页应始终从第7篇开始。但不是正面的。
答案 2 :(得分:0)
<?php if (is_home() && !is_paged() ) {
global $query_string;
parse_str( $query_string, $args );
$args['posts_per_page'] = 4;
query_posts($args);
} else {
global $query_string;
parse_str( $query_string, $args );
$args['posts_per_page'] = 6;
query_posts($args);
} ?>
<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
<div class="post<?php echo ++$counter; ?>">
<?php if ( is_home() && !is_paged() && $counter == 1 ) { ?>
do stuff
<?php } else { ?>
do other stuff
<?php } ?>
</div>
<?php endwhile; ?>