如何将Archives.php中的循环修改为每个页面有11个帖子和CSS样式

时间:2012-08-29 作者:MxmastaMills

我在档案中编辑了我的循环。php,以便使用分页和类别帖子列表小部件。我基本上是根据随机代码和想法拼凑起来的,现在离默认的post查询还很远,我很难回到原点。我需要回到原点的原因是我需要两件事:

1) 当我的帖子有两个分类标签时,我的代码把我的分类帖子搞乱了。当这种情况发生时,他们被放在错误的类别中(或者根本没有被放在)。

2) 通过这种自定义编码,我也丢失了对“标记”的查询,因此标记页面无法正常工作。

我需要回到原点,这样我可以设置标签和分类帖子,以便正确显示,但在正确的范围内<li>这是我的风格。我不确定我是否还需要分类帖子列表小部件,因为如果我没弄错的话,我可以调用set_post_thumbnail_size();, the_title();, the_excerpt(), 等等。没有小部件,只需设置我自己的列表项。

无论如何,这是我的代码,我想我需要清理一堆代码才能回到我需要去的地方。非常感谢你的帮助,我真的很感激。

<?php if (have_posts()) : ?>

<ul style="list-style-type:none;">

<?php
if ($paged == 0)
  $offset = 0;
else
  $offset = ($paged - 1) * 11;
global $post;
$category = get_the_category($post->ID);
$category = $category[0]->cat_ID;
$myposts = get_posts(array(\'numberposts\' => 11, \'offset\' => $offset, \'category__in\' => array($category), \'post__not_in\' => array($post->ID),\'post_status\'=>\'publish\'));
foreach($myposts as $post) :
setup_postdata($post);
?>


<li id="category_li">
    <div id="image_con">
        <div id="image_recent">
        <a href="<?php the_permalink(); ?>"><?php set_post_thumbnail_size( 200, 200 );
the_post_thumbnail(); ?></a>
        </div>
    </div>

    <div id="cr_content">
    <a href="<?php the_permalink(); ?>">
    <div class="gloss_glam_font"> <?php the_title(); ?></div>
    <hr>
    <div class="excerpt_cat"><?php the_excerpt(); ?></div>
    </a>
    </div>

    <div id="clearfix">
    </div>
</li>

<?php endforeach; ?>
<?php wp_reset_query(); ?>
</ul>


<?php while (have_posts()) : the_post(); ?>

<?php endwhile; ?>

<?php if (function_exists("pagination")) {
    pagination($additional_loop->max_num_pages);
} ?>
    <?php else :

        if ( is_category() ) { // If this is a category archive
        printf("<div class=\'post-content\'><p><em><strong>Not Found:</strong> Sorry, but there aren\'t any posts in the &middot;<strong>%s</strong>&middot; category yet.</em></p></div>", single_cat_title(\'\',false));
    } else if ( is_date() ) { // If this is a date archive
        echo("<div class=\'post-content\'><p><em><strong>Not Found:</strong> Sorry, but there aren\'t any posts with this date.</em></p></div>");
    } else if ( is_author() ) { // If this is a category archive
        $userdata = get_userdatabylogin(get_query_var(\'author_name\'));
        printf("<div class=\'post-content\'><p><em><strong>Not Found:</strong> Sorry, but there aren\'t any posts by &middot;<strong>%s</strong>&middot; yet.</em></p></div>", $userdata->display_name);
    } else {
        echo("<div class=\'post-content\'><p><em>No posts found.</em></p></div>");
    }

endif; ?>
编辑好的,我编辑了它,我不知道我在哪里。我在用我的标签。这里以php模板为例(不是category.php)。以下是我迄今为止所做的工作(基于Chip在答案中提供的代码):

function wpse63424_filter_pre_get_posts( $query ) {
    if ( ! is_main_query() ) {
        return $query;
    } else {
        if ( is_category() || is_tag() ) {
            $query->set( \'posts_per_page\',11 );
        }
        return $query;
    }
}
add_filter( \'pre_get_posts\', \'wpse63424_filter_pre_get_posts\' );

$tag = get_query_var(\'tag\');
$myposts = get_posts(\'tag__in\' => array($tag));
foreach($myposts as $post) :
setup_postdata($post);
我的想法是,我已经设置了一个每页11篇文章的过滤器,我查询一个特定的标记,将文章设置为该数组中的标记,然后相应地设置文章。当我刚运行get\\u posts()时;它每一页返回11篇未经过滤的帖子,所以我知道芯片的代码工作正常。我想我还不了解如何正确调用函数。。。

2 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

首先,对于布局和CSS样式,我建议为要自定义的上下文创建模板文件;i、 e.创建category.php 和atag.php 分别用于类别和标记索引存档页。无论哪种情况,请复制archive.php (如果不存在,请复制index.php), 并将副本重命名为category.php. 然后,根据需要修改标记。

对于CSS,请确保使用body_class() 在主题中,然后可以使用基于*类别和标记的CSS classes applied to the <body> tag.

下一步是定制查询,以每页输出10篇文章,而不是类别/标记存档索引页的10篇文章。为此,请使用pre_get_posts 滤器添加以下回调和add_filter() 致电至functions.php:

function wpse63424_filter_pre_get_posts( $query ) {
    if ( ! is_main_query() ) {
        return $query;
    } else {
        if ( is_category() || is_tag() ) {
            $query->set( \'posts_per_page\',11 );
        }
        return $query;
    }
}
add_filter( \'pre_get_posts\', \'wpse63424_filter_pre_get_posts\' );
此回调告诉WordPress:

如果查询不是主查询,则返回它而不修改它。(这可以防止最近发布的小部件查询或导航菜单受到影响。)\'posts_per_page\' 查询变量至11, 然后返回查询

SO网友:darrinb

我不知道最新版本的WP(4.4+)是否有变化,但是is_main_query() 将按原样返回假阳性。它应该是:

function wpse63424_filter_pre_get_posts( $query ) {
    if ( ! $query->is_main_query() ) {
        return $query;
    } else {
        if ( is_category() || is_tag() ) {
            $query->set( \'posts_per_page\',11 );
        }
        return $query;
    }
}
add_filter( \'pre_get_posts\', \'wpse63424_filter_pre_get_posts\' );

结束