如前所述,这不太可能起到任何作用。如果您添加几个var_dump
是这样的:
function sort_by_member_number( $vars ) {
var_dump($vars);
if ( isset( $vars->query_vars[\'orderby\'] ) && \'member-number\' == $vars->query_vars[\'orderby\'] ) {
$vars = array_merge(
$vars->query_vars, array(
\'meta_key\' => \'arcc_member_number\'
)
);
}
var_dump($vars);
return $vars;
}
add_filter( \'pre_user_query\', \'sort_by_member_number\' );
您将注意到,在代码前后都没有发生任何更改,您将无法找到
arrc_member_number
任何地方都有价值。而且,如果查看转储的数据,您会注意到已经构建了查询(仅示例查询):
["query_fields"]=>
string(30) "SQL_CALC_FOUND_ROWS wp_users.*"
["query_from"]=>
string(13) "FROM wp_users"
["query_where"]=>
string(9) "WHERE 1=1"
["query_orderby"]=>
string(28) "ORDER BY user_registered ASC"
["query_limit"]=>
NULL
如果你
look in the source 对于查询实际运行的位置,这些是使用的属性。
换句话说,pre_user_query
工作方式不同pre_get_posts
. 您需要实际解析它query_*
值,这可能很棘手,意味着您需要熟练使用SQL。如果您可以这样编写用户查询。。。
$user_query = new WP_User_Query(
array (
\'orderby\' => \'arcc_member_number\',
\'meta_query\' => array(
array(
\'key\' => \'arcc_member_number\',
\'compare\' => \'EXISTS\'
),
)
)
);
。。。这会让你开始,但你仍然需要改变
query_orderby
因为对你可以订购的东西有硬编码的限制。
function sort_by_member_number( $vars ) {
if ( isset( $vars->query_vars[\'orderby\'] ) && \'arcc_member_number\' == $vars->query_vars[\'orderby\'] ) {
$vars->query_orderby = \'ORDER BY arcc_member_number ASC\';
}
return $vars;
}
add_filter( \'pre_user_query\', \'sort_by_member_number\' );
您只需获得拥有
arcc_member_number
meta\\u键。如果需要所有用户,只需按该键排序,就需要更多的查询操作。