我创建了一个页面,该页面接收信息并根据该选项过滤帖子。该页面使用\\u GET获取信息,我使用以下代码发送查询
$postss = new WP_Query([
\'post_type\' => \'post\',
\'meta_query\' =>
array(
array(
\'key\' => \'City:\',
\'value\' => $city,
\'compare\' => \'LIKE\',
),
array(
\'relation\' => \'OR\',
array(\'key\' => \'Time:\',
\'value\' => \'hour\',
\'compare\' => \'LIKE\',
),
array(\'key\' => \'Time:\',
\'value\' => \'min\',
\'compare\' => \'LIKE\',
),
),
),
\'cat\' => $category,
\'posts_per_page\' => 9,
\'post_status\' => \'publish\',
\'paged\' => $paged
]);
然而,我的问题是,我有一个输入,用户可以指定城市,然后是类别,然后是时间。城市和类别工作得很好,但当我们来的时候,我用下拉列表列出了几个选项:1小时以下、2小时以下、3小时以下等等。有了这个,我可以很容易地用php检查时间值是否为1、2、3等等,然后简单地创建查询
where time LIKE \'%hour%\'
然而,当用户选择1时,意味着它不仅是1小时,还可以包括分钟,例如30分钟,因此结果应该包括1小时,但包括所有分钟,因此查询应该类似于
where time like \'%min%\' OR time like \'%hour%\'
还有一个问题,我不知道如何准确地添加%符号(因为有时有10分钟,有时是20分钟-复数),所以
LIKE \'%min%\'
没关系,但hous就不一样了
LIKE \'%hour%\'
它还包括小时数(2小时3小时,而不仅仅是1小时),所以应该是
where time like \'%hour\'
在sql中很容易,但对于wp\\U查询,我不确定在哪里放置%符号。
ps:我读到,当我在meta\\u查询中使用LIKE时,会自动在字符串的开头和结尾添加%符号,有没有办法删除它们,只在前面或后面添加,但不能同时在前面和后面添加?
meta中的示例值:城市:纽约、东京、伦敦
时间:10分钟、5分钟、20分钟、1小时、1.5小时、2小时、3小时
最合适的回答,由SO网友:Tom J Nowell 整理而成
而不是将您的值存储为;5小时13分钟”;而是将它们存储为时间戳,例如。5:13
5小时13米
这样,您就可以使用日期/时间比较器操作来回答问题
E、 g.在5小时30分钟内获取物品:
$args = [
...
\'meta_query\' => [
[
\'meta_key\' => \'time\',
\'meta_value\' => date( "5:30" ),
\'meta_compare\' => \'<\',
\'type\' => \'TIME\',
],
],
];
$query = new WP_Query( $args );
这将与3小时贴子、4:20贴子或5小时29分钟贴子相匹配。
您可能需要添加:00
所有代码和值结束前的秒数。
对于显示,您可以使用human_readable_duration
. 虽然这将包括秒数,但功能非常简单,因此根据您的需求复制和修改它应该是很简单的。