我真正不理解的是“orderby”=>“meta\\u value”实际上是如何排序的,因为键有多个值。
它没有多个值。它只有一个值:
a:2:{s:3:"day";s:1:"8";s:5:"month";s:5:"March";}`
这是一个
\'serialised array\'. 这只是一种将数组存储为字符串的方法。就WordPress(和MySQL)而言,这只是一个以字母开头的字符串
a
, 它将被相应地排序。
事实上,如果需要按序列化数组进行查询或排序,则序列化数组是非常糟糕的数据存储方式。
您还存储了月份名称,这意味着您无法按月份轻松排序,因为月份名称不是按字母顺序排列的。
如果要按月份和日期进行排序和查询,请使用WP_Query
或WP_User_Query
, 您最好将雇用日期存储为两个字段:hire_month
和hire_day
, 并将这两个值存储为数字。如果你这样做了,你可以像这样做(我猜你是想显示本月有周年纪念日的用户):
$current_month = date( \'n\' ); // 1-12
$current_day = date( \'j\' ); // 1-31
$args_anniversary_current = [
\'role__in\' => [ \'subscriber\', \'subscriberlimited\' ],
\'order\' => \'ASC\',
\'orderby\' => \'hire_day\',
\'meta_query\' => [
[
\'relation\' => \'AND\',
\'hire_month\' => [
\'key\' => \'hire_month\',
\'value\' => $current_month,
\'compare\' => \'=\',
],
\'hire_day\' => [
\'key\' => \'hire_day\',
\'value\' => $current_day,
\'compare\' => \'>=\',
],
],
],
]