在WordPress查询中指定严格的‘Order By’

时间:2013-03-19 作者:mousesports

我有一个自定义的帖子类型,叫做Employees 员工姓名为post_title 每个岗位的。

我正在想办法把post_title 按姓氏排序的列。

例如,如果我们有以下post条目:

1. Justin Bieber 2. Selena Gomez 3. Jessica Alba 4. Nicholas Cage

查询将包含按姓氏排序的整个员工列表,因此:

1. Jessica Alba 2. Justin Bieber 3. Nicholas Cage 4. Selena Gomez

任何人谢谢

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

你可以使用usort(). 回调函数需要确定姓氏并按其排序。

例如:

$args = array( 
    \'post_type\' = \'Employees\',
);
$employees = get_posts( $args );
usort( $employees, \'wp91501_sort_employees\' );
然后您的回调可能是:

function wp91501_sort_employees( $a, $b ) {

    // split the names into arrays
    $a_name = explode( \' \', $a->post_title );
    $b_name = explode( \' \', $b->post_title );

    // get the last name from the $x_name arrays
    $a_last_name = end( $a_name );
    $b_last_name = end( $b_name );

    if( $a_last_name == $b_last_name ) {
        return 0;
    }
    return ($a_last_name < $b_last_name ) ? -1 : 1 ;
}
请注意,这是一个非常简单的比较——如果员工有一个没有连字符的双姓(例如,“John Smythe Jones”),那么它将根据姓名的最后一部分进行排序(在示例中为“Jones”)。

一个更简单的选择可能是以“LastName,FirstName”的形式输入员工,这样您就可以按post_title ASC. 但你需要过滤the_title 如果要将标题显示为“FirstName LastName”。

结束