在我的wordpress模型中,我为用户提供了meta_value,称为ref_credit。 sandro的这个元值看起来像这样:
174 1 ref_credit a:2:{i:0;s:1:"9";i:1;s:2:"10";}
意味着他引用了id = 9,10
的用户另一个用户meta_value如下所示:
209 9 ref_credit a:1:{i:0;s:2:"11";}
他只提到1个用户ID = 11。
现在我想创建一个简单的排行榜,我嘲笑了一些东西,但逻辑是完全错误的。我理解我的代码比较值和订单。我想按照推荐的用户数来订购。
有什么想法吗?
完整的功能是:
//get_users calls WP_User_Query and returns an array of matching users
$users = get_users(
array( 'fields' => 'all_with_meta',
'meta_query' => array( array( 'key' => 'ref_credit', // the meta field (or key) we want to target
'compare' => '>=' // comparison method (optional: =, >, <, etc)
)))
);
//custom function for comparing the data we want to sort by
function cmp($a, $b){
if ($a->points == $b->points) {
return 0;
}
return ($a->points > $b->points) ? -1 : 1;
}
//usort sorts our $users array with our function cmp()
usort($users, 'cmp');
//leaving an array of $users sorted by the value of meta 'points'
echo '<ol>';
foreach ($users as $user) {
echo '<li>' . $user->display_name . '</li>';
}
echo '</ol>';
答案 0 :(得分:0)
我认为有一些问题。
首先,all_with_meta
似乎没有带回元数据,尽管顾名思义。不确定它应该做什么 - codex没有多大帮助。因此,您必须自己获取ref_credit
值。
其次,您的比较似乎是使用名为points
的内容,而不是ref_credit
。不知道那是从哪里来的。由于ref_credit
是一个数组,因此您必须比较数组长度,而不是值本身(使用count
说)。
原样保留原始查询,这样的事情应该有效(尽管你可能需要检查我的cmp
结果是否正确):
//get_users calls WP_User_Query and returns an array of matching users
$users = get_users(
array( 'fields' => 'all_with_meta',
'meta_query' => array(
array( 'key' => 'ref_credit', // the meta field (or key) we want to target
'compare' => '>=' // comparison method (optional: =, >, <, etc)
)
)
)
);
foreach($users as $user_id => $user) {
$user->ref_credit = get_user_meta($user_id, 'ref_credit', true);
}
//custom function for comparing the data we want to sort by
function cmp($a, $b){
return count($b->ref_credit) - count($a->ref_credit);
}
usort($users, 'cmp');
//leaving an array of $users sorted by the value of meta 'points'
echo '<ol>';
foreach ($users as $user) {
echo '<li>' . $user->display_name . '</li>';
}
echo '</ol>';