Compare custom field values

时间:2022-02-17 作者:Wordprez

我创建了一个页面,该页面接收信息并根据该选项过滤帖子。该页面使用\\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小时

1 个回复
最合适的回答,由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. 虽然这将包括秒数,但功能非常简单,因此根据您的需求复制和修改它应该是很简单的。