WordPress函数:WP_Query 如何对查询结果排序

追格官方小助手/ 2022年07月10日/ WordPress/ 浏览 2328

在WordPress中,如何对文章查询结果排序?


WP_Query中提供了 order 和 orderby 参数,可以很方便的对查询出的文章排序。


order 支持 ASC 顺序 和 DESC 逆序。


orderby 即排序方式,支持的方式则可谓五花八门。


none - 不排序;

ID - 按文章ID排序;

author - 按作者排序;

title - 按文章标题排序;

name - 按文章slug排序;

type - 按文章类型排序;

date - 按文章发布日期排序;

modified - 按文章修改日期排序

parent - 按文章parent排序;

rand - 随机顺序

comment_count - 按评论数量排序

menu_order - 文章类型为page时,即页面,编辑时可看见【页面属性】里有排序,可设置数值。当文章为post时,这个数值为0。所以说,只有当文章类型是 page 时,按menu_order排序才有效;

meta_key,meta_value - 根据文章的附属属性排序。还可以使用 meta_type 设置 meta 的数据类型,如NUMERIC, BINARY, CHAR, DATE, DATETIME, DECIMAL, SIGNED, TIME, UNSIGNED等,相应的应当使用meta_value_*,如meta_value_num、meta_value_datetime 等;

post_in - 需和参数 post_in 配合使用;

post_name_in -  需和参数 post_name_in 配合使用;

post_parent_in -  需和参数 post_parent_in 配合使用;


使用示例:


// 按文章标题排序
$args = array(
    'orderby' => 'title',
    'order'   => 'DESC',
);
$query = new WP_Query($args);

// 按标题和【排序】值排序
$args = array(
    'orderby' => 'menu_order title',
    'order'   => 'DESC',
);
$query = new WP_Query($args);

// 按随机顺序排序
$args = array(
    'orderby'        => 'rand',
    'posts_per_page' => '1',

);
$query = new WP_Query($args);

// 按评论数量排序
$args = array(
    'orderby' => 'comment_count'
);
$query = new WP_Query($args);

// 按文章属性 price 排序
$args = array(
    'post_type' => 'product',
    'orderby'   => 'meta_value_num',
    'meta_key'  => 'price',
);
$query = new WP_Query($args);

// 按标题【顺序】,ID【逆序】排序
$args = array(
    'orderby' => array('title' => 'ASC', 'ID' => 'DESC')
);
$query = new WP_Query($args);

// 文章属性值 和 标题也可以同时排序
$args = array(
    'orderby'  => array('meta_value_num' => 'DESC', 'title' => 'ASC'),
    'meta_key' => 'age'
);
$query = new WP_Query($args);

// 和meta_query联合使用
$args = array(
    'post_type'  => 'my_custom_post_type',
    'meta_key'   => 'age',
    'orderby'    => 'meta_value_num',
    'order'      => 'ASC',
    'meta_query' => array(
        array(
            'key'     => 'age',
            'value'   => array(3, 4),
            'compare' => 'IN',
        ),
    ),
);
$query = new WP_Query($args);

// 多个文章属性同时排序
$q = new WP_Query(array(
    'meta_query' => array(
        'relation' => 'AND',
        'state_clause' => array(
            'key' => 'state',
            'value' => 'Wisconsin',
        ),
        'city_clause' => array(
            'key' => 'city',
            'compare' => 'EXISTS',
        ),
    ),
    'orderby' => array(
        'city_clause' => 'ASC',
        'state_clause' => 'DESC',
    ),
));


WP_Query 的基础用法可以参考文章:WP_Query 的基础用法简介

发表评论

暂无评论,抢个沙发...

客服 工单