我在使用WP_User_Query
要按元数值对用户进行排序,我认为这很简单,因为它只按字母降序显示结果。
<?php
$args = array(
\'orderby\' => \'meta_value_num\',
\'meta_key \' => \'epicredvote\',
\'order\' => \'DESC\',
);
// The Query
$user_query = new WP_User_Query( $args );
// User Loop
if ( ! empty( $user_query->results ) ) {
foreach ( $user_query->results as $user ) {
echo \'<p>\' . $user->display_name . \'</p>\';
}
} else {
echo \'No users found.\';
}
?>
我可以很容易地获得每个作者的元值,但我无法让用户按相同的元值排序。
编辑birgire的答案。
这仍然会输出“未找到用户”。
在函数中。php
function wpse_149342_pre_user_query( $query )
{
remove_action( current_action(), __FUNCTION__ );
$query->query_orderby = str_replace(
\'meta_value\',
\'meta_value+0\',
$query->query_orderby
);
}
回路:-
<?php
$args = array(
\'meta_key\' => \'epicredvote\',
\'orderby\' => \'meta_value\',
\'order\' => \'DESC\',
);
add_action( \'pre_user_query\', \'wpse_149342_pre_user_query\' );
// The Query
$user_query = new WP_User_Query( $args );
// User Loop
if ( ! empty( $user_query->results ) ) {
foreach ( $user_query->results as $user ) {
echo \'<p>\' . $user->display_name . \'</p>\';
}
} else {
echo \'No users found.\';
}
?>
wordpress的版本是3.9.1。
我看了一下皮特的答案,我无法理解。
让我解释一下,在这种情况下,meta\\u键是什么。
epicredvote是一个数字值,每个帖子都有一个投票系统,John发了2个帖子,每个帖子都有10票,然后John对他的两个帖子总共有20票。
关于作者。php我使用它来提取用户对其所有帖子的投票总数。
function author_rating_total() {
$user_id = get_the_author_meta( \'ID\' );
$query = array (
\'author\' => $user_id,
\'suppress_filters\' => \'true\', //lets skip some unnessecery sql queries
\'posts_per_page\' => -1
);
$queryObject = new WP_Query($query); while($queryObject->have_posts()) : $queryObject->the_post();
$post_ratings_data = get_post_custom(get_the_id());
$post_ratings_score = intval($post_ratings_data[\'epicredvote\'][0]);
$ratings_array[] = $post_ratings_score;
endwhile;
$ratings_sum = 0;
if (is_array($ratings_array)){
$ratings_sum = array_sum($ratings_array);
}
echo $ratings_sum;
wp_reset_query();
}
那我就可以了
echo author_rating_total();
显示用户为其所有帖子收到的投票总数。
可以很容易地使用WP\\u user\\u查询来提取相同的元值,然后在给定的日期范围内对作者进行相应的排名,显然不是那么多!
一定有办法的!
SO网友:birgire
您可以尝试通过pre_user_query
挂钩:
$args = array(
\'meta_key\' => \'epicredvote\',
\'orderby\' => \'meta_value\',
\'order\' => \'DESC\',
);
add_action( \'pre_user_query\', \'wpse_149342_pre_user_query\' );
$user_query = new WP_User_Query( $args );
其中:
/**
* Change \'meta_value\' to \'meta_value_num\'
*
* @param WP_User_Query $query
* @return void
*/
function wpse_149342_pre_user_query( $query )
{
remove_action( current_action(), __FUNCTION__ );
$query->query_orderby = str_replace(
\'meta_value\',
\'meta_value+0\',
$query->query_orderby
);
}
下面是一个修改后的SQL查询示例:
SELECT SQL_CALC_FOUND_ROWS wp_users.*
FROM wp_users
INNER JOIN wp_usermeta ON (wp_users.ID = wp_usermeta.user_id)
WHERE 1=1
AND (wp_usermeta.meta_key = \'epicredvote\' )
ORDER BY wp_usermeta.meta_value+0 DESC
我希望这有帮助。