2016-12-04 111 views
2

我想我的目录按姓氏排序。我怎样才能做到这一点?使用get_user排序姓氏的麻烦

function dispDirectory() 
{ 
    global $user_ID; 

    // Disallow directory if there is a messaging administrator and this person is not it. 
    if ($this->admin_user_id && $this->admin_user_id != $user_ID) { 
    return ''; 
    } 

    $users = $this->get_users(); 
    $directory = ""; 


    foreach($users as $u) 
    { 
    $firstName = get_user_meta($u->ID, 'first_name', true); 
    $lastName = get_user_meta($u->ID, 'last_name', true);   

    $directory .= '<p><strong>'.$lastName.', '.$firstName.'</strong> - <a href="'.$this->actionURL.'newmessage&to='.$u->ID.'">'.__('Send Message', 'cartpaujpm').'</a></p>'; 
    } 
    return $directory; 
} 

排序,我已经试过了foreach循环之前添加以下:

usort($users, create_function('$a, $b', 'return strnatcasecmp($a->last_name, $b->last_name);')); 

这个整理列表中,但不按字母顺序(或尽可能我可以告诉任何有用的顺序)

回答

0

这是我的解决方案:

function dispDirectory() 
{ 
    global $user_ID; 

    // Disallow directory if there is a messaging administrator and this person is not it. 
    if ($this->admin_user_id && $this->admin_user_id != $user_ID) { 
    return ''; 
    } 

    $args = array(
     'meta_key' => 'last_name', 
    ); 

    $wp_user_query = new WP_User_Query($args); 
    $wp_user_query->query_orderby = str_replace('user_login', 'wp_usermeta.meta_value', $wp_user_query->query_orderby); 
    $wp_user_query->query(); 

    $users = $wp_user_query->get_results(); 


    foreach($users as $u) 
    { 
    $firstName = get_user_meta($u->ID, 'first_name', true); 
    $lastName = get_user_meta($u->ID, 'last_name', true);   

    $directory .= '<p><strong>'.$lastName.', '.$firstName.'</strong> - <a href="'.$this->actionURL.'newmessage&to='.$u->ID.'">'.__('Send Message', 'cartpaujpm').'</a></p>'; 
    } 
    return $directory; 
} 
0

在调用get_users()时,可以传递允许按元值排序的参数。见this WP Codex

的(未经测试)例如可以是:

$users = $this->get_users([ 
    'meta_key' => 'last_name', 
    'orderby' => 'meta_value', 
    'order' => 'ASC' 
]); 

我相信你的榜样是行不通的,因为财产last_name不会在User对象上存在(而是User Meta)。

+0

我相信你是对有关的元问题。我试图按照你的建议将参数添加到get_user(),但它对我的排序没有任何作用。我已经看到其他使用这个的例子,他们似乎工作。我不确定为什么不在这里。混乱。谢谢你的帮助。 –

+0

@CraigTucker肯定玩查询 - 你会最终得到它的权利。您可能还需要检查WP_User_Query以获取完整文档。我发布的内容应该有所帮助 - 你确定在查询后(查询和循环之间)没有其他干扰吗? –