0

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

4

3 回答 3

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 篇文章开始。虽然不是积极的。

于 2011-04-06T23:23:17.097 回答
1

你在使用某种框架吗?这是一个非常糟糕的模板引擎。

无论如何,如果你需要添加样式,你应该把工作留给 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 的人

于 2011-04-06T23:10:26.867 回答
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; ?>
于 2011-04-07T17:11:06.793 回答