无法让这个过于复杂的循环正常工作

时间:2011-04-06 23:04:58

标签: php wordpress loops posts if-statement

所以我在我的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语句?

3 个答案:

答案 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; ?>