如何为每个类别选择排序顺序(针对帖子)?(理想情况下是在创建新类别时)

时间:2012-06-17 作者:Frank

假设我有一堆帖子(文章)分为两类:“即将到来的事件”(cat=1)和“过去的事件”(cat=2)。当列出这两个类别中某一特定类别的所有帖子时,类别1应按升序排列(先发帖子,即先发之前即将发生的事件),而类别2应按降序排列(之前针对过去事件的帖子应显示在列表的更下方)。

通过菜单项进行导航,我可以使用URL参数,如

mywordpressblog。示例/?类别=1(&A);订单=asc

然而,由于我必须“手动”添加第二个参数,当人们只需单击为每个帖子显示的类别标签时,它就会消失。

因此,我需要在创建或修改类别时选择排序顺序,以便在显示该类别的所有帖子时使用此排序顺序。有没有办法做到这一点?

有几个相关的问题对我没有帮助,因为他们要么要求定义完全自定义的排序顺序,要么要求对类别(不是帖子)进行排序,要么因为这些问题还没有解决,要么涉及一些我想要避免的代码纠结,以便插件和wordpress更新能够正常工作。Setting Custom Sort Order of Posts within a CategoryDifferent post sort order within different categoriesAscending sort order for monthly & category view, i.e. ?m=201204, ?cat=4

1 个回复
最合适的回答,由SO网友:Milo 整理而成

为您的类别手动添加它相当简单,如果您希望能够从管理UI设置和存储排序顺序,这就需要更多的操作。

手动修复可以通过pre_get_posts 挂钩:

function wpa55535_pre_get_posts( $query ){
    // if this is a category page
    if( $query->is_category ):
        // if cat = 1, set order to ASC
        if( $query->query_vars[\'cat\'] == 1 ):
            $query->set( \'order\', \'ASC\' );
        // if cat = 2, set order to DESC
        elseif( $query->query_vars[\'cat\'] == 2 ):
            $query->set( \'order\', \'DESC\' );
        endif;
    endif;
    return $query;
}
add_action( \'pre_get_posts\', \'wpa55535_pre_get_posts\' );
如果你使用的是“漂亮”永久链接,你必须检查category_name 而不是cat, 因为在这种情况下,它是按名称而不是ID查询的。

结束

相关推荐

Delete Child Posts

当父帖子被删除时,我正在尝试删除所有子帖子。父帖子删除得很好,但子帖子没有正确删除。以下是我现在掌握的代码:$args = array( \'post_parent\' => $parentid, \'post_type\' => \'custom-type\' ); $posts = get_posts( $args ); if ($posts) {