我的WordPress用户有一个自定义的生日元密钥(DD/MM/AAAA,例如2020年2月25日)。
如果我想让所有用户今天(2002年2月25日)出生,我可以使用:
$todays_birthday=\'25/02/\';
get_users(array(\'meta_compare\'=>\'like\', \'meta_key\'=>\'birthday\', \'meta_value\'=>$todays_birthday));
它工作完美,返回所有今天出生的用户。
我的问题是:如果我想让所有用户在整个星期内出生,该怎么办?E、 g.:
$todays_birthday=array(\'24/02/\', \'25/02/\', \'26/02/\', \'27/02/\', \'28/02/\', \'29/02/\', \'01/03/\');
我的get\\u users查询是什么?
我已经尝试了我在网上找到的所有解决方案,但都没有成功,它们都没有返回任何结果。
SO网友:Tom J Nowell
首先,可以使用meta_query
, 但是,您应该更改值以使用正确的日期格式,例如2020年1月2日为2020年1月2日,而不是区域格式。看见https://en.wikipedia.org/wiki/ISO_8601 了解更多详细信息。
第二,你的LIKE
查询将非常昂贵,并且在仍然使用LIKE
查询将更加昂贵。因此,存储第二个包含月份和日期的用户元,但始终将年份设置为相同的值
然后,执行类似的操作:
get_users( [
\'meta_query\' => [
[
\'meta_key\' => \'birthday_no_year\',
\'compare\' => \'BETWEEN\',
\'meta_value\' => [ \'2000/01/01\', \'2000/02/01\' ],
\'type\' => \'DATE\'
]
]
]);
注意事项:
您需要编写代码来存储birthday_no_year
值也一样,您需要为现有用户添加这些值,搜索具有特定元值的对象非常昂贵,无论是按帖子元搜索/过滤帖子,还是按用户元过滤用户。它不可扩展,而且可能会变得非常昂贵,导致服务器停机。缓存此数据并寻找其他存储数据的方法法律后果最后,用户应选择加入,此功能可能被视为个人身份信息泄露,透露用户的出生日期。这违反了许多数据保护和隐私法,尤其是在欧洲。我建议你咨询一下律师,尤其是如果你打算揭露这个人的年龄的话。