使用get_user排序姓氏的麻烦
问题描述:
我想我的目录按姓氏排序。我怎样才能做到这一点?使用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);'));
这个整理列表中,但不按字母顺序(或尽可能我可以告诉任何有用的顺序)
答
这是我的解决方案:
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;
}
答
在调用get_users()
时,可以传递允许按元值排序的参数。见this WP Codex。
的(未经测试)例如可以是:
$users = $this->get_users([
'meta_key' => 'last_name',
'orderby' => 'meta_value',
'order' => 'ASC'
]);
我相信你的榜样是行不通的,因为财产last_name
不会在User
对象上存在(而是User Meta
)。
我相信你是对有关的元问题。我试图按照你的建议将参数添加到get_user(),但它对我的排序没有任何作用。我已经看到其他使用这个的例子,他们似乎工作。我不确定为什么不在这里。混乱。谢谢你的帮助。 –
@CraigTucker肯定玩查询 - 你会最终得到它的权利。您可能还需要检查WP_User_Query以获取完整文档。我发布的内容应该有所帮助 - 你确定在查询后(查询和循环之间)没有其他干扰吗? –