之所以只获取那些拥有该meta\\u密钥的用户,是因为您包含了\'meta_key\' => \'...\'
在里面$args
. 这将结果限制为具有该键的结果,而不管您在meta_query
. 这适用于WP_Query
, WP_User_Query
和WP_Comment_Query
.
从WP 4.2开始,您可以在meta_query
然后在orderby
条款,请参见Query improvements in WP 4.2: ‘orderby’ and ‘meta_query’. 不幸的是WP_Query
和WP_User_Query
尚未更新以反映这一点,althoWP_Meta_Query 确实涵盖了它。
所以,你可以ALMOST 通过以下方式获得您想要的:
$args = array (
\'role\' => \'my_staff_role\',
\'fields\' => \'all\',
\'meta_query\' => array (
\'relation\' => \'OR\',
\'exists\' => array (
\'key\' => \'staff_profile_position\',
\'compare\' => \'EXISTS\',
// \'type\' => \'NUMERIC\',
),
\'not_exists\' => array (
\'key\' => \'staff_profile_position\',
\'compare\' => \'NOT EXISTS\',
),
),
\'orderby\' => \'exists not_exists\',
) ;
Note: 模仿
\'orderby\' => \'meta_value_num\'
(正如你在问题中所说)你必须包括
\'type\' => \'NUMERIC\'
在
meta_query
条款。但是,这会导致所有没有排序的用户排序到顶部,而不是底部(这就是为什么我在上面对其进行了注释)。
因此,如果您可以接受让那些用户将meta\\u键作为字符串而不是数字来排序,那么上述操作就可以了。
如果不能,则必须执行两个单独的查询(一个用于具有meta\\u键的用户,按该键进行数字排序,另一个用于没有meta\\u键的用户),并合并这两个查询的结果。