如何根据元价值对帖子进行排序?

时间:2015-07-15 作者:Anas Mcguire

所有帖子都使用自定义字段“截止日期”(格式:yyyy-mm-dd)。如何使我的分类页面按顺序发布帖子meta_key “截止日期”和DESC? 我用这个:

if ( get_query_var( \'paged\' ) ) { 
    $paged = get_query_var(\'paged\'); 
} elseif ( get_query_var( \'page\' ) ) { 
    $paged = get_query_var( \'page\' ); 
} else { 
    $paged = 1; 
}
query_posts( array( 
    \'paged\'    => $paged , 
    \'cat\'      => $category_id , 
    \'meta_key\' => \'deadline\' , 
    \'orderby\'  => \'meta_value\' , 
    \'order\'    => \'DESC\' 
));
get_template_part( \'loop\' );
但按顺序发帖不起作用meta_value.

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

如上所述,切勿使用query_posts, 因为它破坏了很多东西。使用过滤器,如pre_get_posts 相反过滤器pre_get_posts 允许您在WP执行查询之前对其进行编辑。以下代码将按所需的元值排序。我这样做是为了使它只在页面的主查询和帖子类型上起作用post, 但您可以对其进行编辑并进一步过滤:

function wpse194643_special_sort( $query ) {
    //is this the main query and is this post type of post
    if ( $query->is_main_query() && $query->is_post_type( \'post\' ) ) {
        //Do a meta query
        $query->set( \'meta_query\', array(
            array( \'key\' => \'deadline\' )
        ) );
        //sort by a meta value
        $query->set( \'orderby\', \'meta_value\' );
        $query->set( \'order\', \'DESC\' );
    }
}
add_action( \'pre_get_posts\', \'wpse194643_special_sort\' );

结束