我希望我的目录按姓氏排序。我怎样才能做到这一点?
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 :(得分:3)
在调用get_users()
时,您可以传递允许您按元值排序的参数。请参阅this WP Codex。
一个例子(未经测试)可能是:
$users = $this->get_users([
'meta_key' => 'last_name',
'orderby' => 'meta_value',
'order' => 'ASC'
]);
我相信您的示例无法正常工作,因为last_name
对象(而不是User
)上的User Meta
属性不存在。
答案 1 :(得分: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;
}
答案 2 :(得分:0)
按姓排序get_users():
<? $users = get_users('orderby=meta_value&meta_key=last_name'); ?>
要按姓,然后按名字(如果多个用户具有相同的姓)对get_users()进行排序:
<?
$users = get_users(array('fields' => 'all_with_meta'));
usort($users, function($a, $b) { if ($a->last_name.$a->first_name == $b->last_name.$b->first_name) { return 0; } return ($a->last_name.$a->first_name > $b->last_name.$b->first_name) ? 1 : -1; });
?>
答案 3 :(得分:0)
寻找Etienne Dupuis解决方案,我添加了一个名为NIT的meta_key,然后按last_name对结果进行排序,就可以了!
$args = array ( 'meta_key' => 'NIT',
'meta_value' => $nit_user);
$users = get_users($args);
usort(
$users,
function($a, $b) {
if ($a->last_name.$a->first_name == $b->last_name.$b->first_name) {
return 0;
}
return ($a->last_name.$a->first_name > $b->last_name.$b->first_name) ? 1 : -1;
}
);
if ( ! empty( $users ) ) {
foreach ( $users as $the_user ) {
//...
}
}