如何根据一组META_KEY值检查单个数字值?

时间:2015-09-20 作者:Els

关于检查meta_key 针对一系列meta_values, 但我想做相反的事。

我有一个网站,有项目和新闻评论。当客户添加审查时,他们有一个自定义字段(ACF)从列表中选择与之相关的项目。

我现在尝试在一个页面上显示与某个项目相关的所有新闻评论。我有项目ID,并使用带有$args的查询来选择我想要的新闻评论。

我的当前$args:

$args = array(
    \'post_type\'     =>  \'pressreview\',
    \'order\'         =>  DESC,
    \'meta_query\' => array(
        array(
            \'key\' => \'belongs_to_project\',
            \'value\' => $projectID,
            \'compare\'   => \'LIKE\'
        )
    )
);
问题是,该自定义字段\'belongs_to_project\' 返回ID为的数组。一次新闻评论可以涉及多个项目,因此我让客户从该字段的列表中选择多个项目。典型阵列如下所示:

Array ( [0] => 210 [1] => 202 ).
我想做的是检查$projectID 在该数组中。

在当前设置中,它可以正常工作:如果客户端从列表中选择202和210,并且$projectID210, 显示新闻评论。但是,如果$projectID = 20, 我们得到新闻界对项目的评论201, 202, 203, 等等(因为这些数字包括\'20\', 这就是为什么LIKE 工程)

我能告诉这个查询只检查“整数”吗?所以“2”只显示项目的评审2, 而不是201, 202, 或者其他有2的数字?

我看到有一个REGEXP 选项使用,而不是LIKE, 但我不知道如何使用它,它只检查“整数”。

我也试过了IN\', 但这在这里根本不起作用。

我想到了一件事,但不知道是否有可能,那就是使用以下内容:

\'key\' => \'belongs_to_project[$i]\'
通过键值进行某种循环$projectID 可通过检查\'=\' 而不是LIKE 针对自定义字段数组中的每个值。我不知道是否有这样的选择,也不知道应该如何写。

希望我的解释足够清楚,如果需要更好的解释,请告诉我。

2 个回复
最合适的回答,由SO网友:Els 整理而成

解决方案是我需要比较$projectID, 因此LIKE 比较精确的字符串,而不仅仅是数字。制作$projectID 文字,它需要用引号括起来。

所以,我改变了这一行:

\'value\' => $projectID,

收件人:

\'value\' => \'"\'.$projectID.\'"\',

这就解决了问题。

SO网友:Khaled Sadek

我认为你应该使用INcompare但你说这行不通。我注意到(如果这是个错误,请原谅我):您为数组编写了示例

Array ( [0] => 210 [1] => 202 ).
这意味着数组中的值为NUMERIC 默认类型为“CHAR”。所以你可以试试

$args = array(
    \'post_type\'     =>  \'pressreview\',
    \'order\'         =>  DESC,
    \'meta_query\' => array(
         array(
            \'key\' => \'belongs_to_project\',
            \'value\' => $projectID,
            \'compare\'   => \'IN\',
            \'type\'     => \'NUMERIC\'
         )
     )
);

相关推荐

警告:CALL_USER_FUNC_ARRAY()要求参数1是有效的回调

我创建了一个新的wordpress,没有主题,只有一个插件:GDPR WP。(我想先在空wordpress上试用这个插件,然后再将它部署到其他网站上)。所以,我第一次尝试创建函数来接受或不接受GoogleAnalytics cookie。我的函数工作正常,但在BO/FO上有一个错误:Warning: call_user_func_array() expects parameter 1 to be a valid callback, function \'cookie_GA\' not found or i