【发布时间】:2022-10-01 00:30:18
【问题描述】:
我在比较 wp_query 中两个数组之间的值时遇到问题
我有两个角色 administrator 和 forhandler_salg($roles 返回一个包含这两个值的数组),但它只查询将“public”键设置为 true 的帖子
当我将 \"allowed_userroles\" 键比较值更改为 \"LIKE\" 时,我收到了更多帖子,但这些帖子不是正确的
$roles = \"\";
if (is_user_logged_in()) {
$user = wp_get_current_user();
$roles = (array) $user->roles;
}
$args = array(
\'post_type\' => \'downloads\',
\'posts_per_page\' => \'-1\',
\'meta_query\' => array(
\'relation\' => \'OR\',
array(
\'key\' => \'public\',
\'value\' => true,
\'compare\' => \'=\',
),
# Not working
array(
\'key\' => \'allowed_userroles\',
\'value\' => $roles,
\'compare\' => \'IN\',
),
),
);
print_r($args) 返回
Array
(
[post_type] => downloads
[posts_per_page] => -1
[meta_query] => Array
(
[relation] => OR
[0] => Array
(
[key] => public
[value] => 1
[compare] => =
)
[1] => Array
(
[key] => allowed_userroles
[value] => Array
(
[16] => administrator
[17] => forhandler_salg
)
[compare] => IN
)
)
)
当我 print_r() 帖子的 allowed_userroles 时,将“public”自定义字段设置为 true 并添加一些角色的帖子会返回此内容:
Array
(
[0] => role1
[1] => role2
[2] => role3
)
我将如何检查查询中的 allowed_userroles 是否具有 $roles 中也存在的值?
编辑:如果我手动输入一个角色,\“like\”就可以了
-
您是否尝试过拆分
$roles中的值并将它们中的每一个添加到元查询中? -
@TPaone 嗯,我只是尝试用 implode 来做,它似乎可以工作,但是在我用 implode 变量替换 $roles 变量之后,它重复了 21 次,似乎每个帖子一次
-
我更多地考虑查询看起来更像
public =\"true\" OR allowed_userroles LIKE \"%Role1%\" OR allowed_userroles LIKE \"%Role2%\"。我假设allowed_userroles字段存储的是逗号分隔的字符串? -
哦,问题是它是一个动态自定义字段,所以我无法对其进行硬编码,并且 LIKE 还不够好,因为它会返回包含角色中的单词的任何帖子 + 更多添加到它似乎也不起作用(从我的第一条评论开始),它只是为每个帖子重复一次
-
是的,我明白了。您只需分解角色数组,然后将每个角色添加为单独的 meta_query 条件。关于结果的数量,这可能是 OR 条件返回 true 的情况。您可能需要添加查询监视器插件来查看 SQL 语法并检查生成的语法是否符合预期。如有疑问,您始终可以使用
$wpdb并构建您自己的查询。
标签: wordpress advanced-custom-fields