如何对每个不同类别的帖子进行排序?

时间:2019-04-17 作者:Oscar Andres

在wordpress中,目前仅在我的主博客页面上,我成功地对所有帖子进行了排序:

<?php if ( is_active_sidebar( \'blog-category\' ) ) : ?>
                    <?php dynamic_sidebar( \'blog-category\' ); ?>
                <?php endif; ?>
              </div>
              <div class="blog_list_content">
<?php
           global $wp_query;
             $args =  array(
                \'meta_key\' => \'publish_date\',
                \'orderby\' => \'meta_value\',
                \'order\' => \'DESC\'
            );
            $args = array_merge( $wp_query->query, $args );
            query_posts( $args );
           if (have_posts()) :
               while (have_posts()) : the_post();
                    get_template_part( \'template-parts/content\', get_post_format() );
               endwhile;
               theme_paging_nav();
           endif;
           ?>
当我单击博客类别时,排序不起作用。仅在主博客页面上。为了以同样的方式对其他类别的帖子进行排序,我需要做什么?

2 个回复
SO网友:Krzysiek Dróżdż

首先,您不应该使用自定义查询来更改帖子的顺序。这可能会导致分页问题,而且肯定不是最优的。

所以首先要做的事。删除代码的该部分:

        global $wp_query;
        $args =  array(
            \'meta_key\' => \'publish_date\',
            \'orderby\' => \'meta_value\',
            \'order\' => \'DESC\'
        );
        $args = array_merge( $wp_query->query, $args );
        query_posts( $args );
它所做的只是更改几个参数并再次调用查询。但有一个操作允许您在运行查询之前添加自定义参数:pre_get_posts. 您还可以使用它修改类别存档的顺序:

function my_set_custom_order( $query ) {
    if ( ! is_admin() && $query->is_main_query() ) {  // modify only main query on front-end
        if ( is_home() ) {
            $query->set( \'meta_key\', \'publish_date\' );
            $query->set( \'orderby\', \'meta_value\' );
            $query->set( \'order\', \'DESC\' );
        }
        if ( is_category( \'cats\' ) ) {
            $query->set( \'meta_key\', \'cat_name\' );
            $query->set( \'orderby\', \'meta_value\' );
            $query->set( \'order\', \'ASC\' );                
        }
        // ...
    }
}
add_action( \'pre_get_posts\', \'my_set_custom_order\' );
这将对您的主页描述进行排序publish_date 和您的猫分类ASCcat_name.

您可以在其中添加任何您想要/需要的内容,并且可以使用Conditional Tags 仅修改某些请求的查询。

SO网友:Matt Cromwell

您很可能更新了索引。php对吗?对于类别页面,您可以使用类别。php(或archive.php,但category.php更具体)。

法典有一个很好的例子,你可以很容易地适应:https://codex.wordpress.org/Category_Templates#Different_Text_on_Some_Category_Pages

<?php if (is_category(\'Category A\')) : ?>
<p>This is the text to describe category A</p>
<?php elseif (is_category(\'Category B\')) : ?>
<p>This is the text to describe category B</p>
<?php else : ?>
<p>This is some generic text to describe all other category pages, 
I could be left blank</p>
<?php endif; ?>
或者,您可以获得非常具体的,并通过类别slug进行自定义,为您创建的每个类别都有一个唯一的模板。所以如果你有三个类别叫做:

猫、狗、仓鼠三种模板,分别称为:

猫类。php分类狗。php类汉普斯特人。为了对每个模板进行自定义排序,您需要使用“orderby”参数自定义wp\\u查询参数。请参见此处:https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters

我希望这能把事情弄清楚一点。祝你好运