我有一个名为“游戏”的自定义帖子类型,其中包含一些ACF字段。其中一个字段是一个Post对象(称为review\\u link),它接受来自名为“reviews”类别的帖子。另一个字段是分类字段(称为gametags),用于查找“posts”的post\\u标记分类
这就是我正在努力实现的目标:
每当您阅读类别评论中的帖子(post\\u type=post)时,都可以从游戏(post\\u type=Game)中向侧边栏添加信息,该游戏在post Object字段中有此特定帖子。
每当您从任何类别阅读帖子(post\\u type=post)时,都可以获得该帖子的标签,并查看游戏(post\\u type=game)ACF字段,特别是分类字段,以找到任何匹配的标签,然后显示一些游戏信息。
我的案例1代码如下,效果很好:
$reviewID = $post->ID;
if(in_category(\'reviews\') ) {
$reviewArgs = array(
\'post_type\' => \'game\',
\'meta_query\' => array(
array(
\'key\' => \'review_link\',
\'value\' => \'\'.$reviewID.\'\',
\'compare\' => \'LIKE\'
)
)
);
}
现在,对于案例2,我尝试了以下方法:
$tag_ids = wp_get_post_tags( $post->ID, array( \'fields\' => \'ids\' ) );
$reviewArgs = array(
\'post_type\' => \'game\',
\'meta_query\' => array(
array(
\'key\' => \'gametags\',
\'value\' => $tag_ids,
\'compare\' => \'IN\'
)
)
);
示例帖子的$tag\\u id是:818436435,43,46,77。如果我将上述代码中的$tag\\u id替换为435,它将匹配。但是,如果我尝试像数组一样添加它,则不会。我还尝试了序列化数组、循环数组等。这些都不起作用。我可以创建一个元查询数组,但问题是每个帖子中的标签数量是随机的。我还尝试将数组转换为字符串,并使用“LIKE”而不是“IN”和“nothing”。
实际上,上面的代码抛出了一个警告:warning:trim()期望参数1是字符串,数组在//public\\u html/wp includes/class wp元查询。php在线594
我几乎用尽了一切办法让案例2奏效,但都做不到。据我所知,当meta值是一个数组时,meta\\u查询并没有像预期的那样工作,尽管Codex指定它可以是一个数组。以上所有代码都放在侧栏中。php。
任何提示都将被告知
提前感谢
最合适的回答,由SO网友:majick 整理而成
我不知道是否可以直接将一个数组与另一个数组进行比较,但可以创建一个循环来设置meta_query
将分别检查字段中每个ID的数组:
$tag_ids = wp_get_post_tags( $post->ID, array( \'fields\' => \'ids\' ) );
$meta_query = array(\'relation\' => \'OR\');
foreach ($tags_ids as $tag_id) {
$meta_query[] = array(
\'key\' => \'gametags\',
\'value\' => $tag_id,
\'compare\' => \'IN\'
);
}
$reviewArgs = array(
\'post_type\' => \'game\',
\'meta_query\' => $meta_query
);
注意:如果没有为帖子设置标记,这可能会产生错误,因此您可能需要为这种情况添加一些替代处理。
编辑:稍后尝试此操作以测试精确匹配。。。
$review_query = new WP_Query( $reviewArgs );
while( $review_query->have_posts() ) {
$review_query->the_post();
global $post; $checkmatch = false;
$gametags = get_post_meta($post->ID,\'gametags\');
if (!is_array($gametags)) {$gametags = explode(\',\',$gametags);}
foreach ($tags_ids as $tag_id) {
if (in_array($tag_id,$gametags)) {$checkmatch = true;}
}
if ($checkmatch) {
// echo output
}
}