数组中的META_QUERY键值

时间:2016-05-19 作者:Pantso

我有一个名为“游戏”的自定义帖子类型,其中包含一些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。

任何提示都将被告知

提前感谢

2 个回复
最合适的回答,由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
    }
}

SO网友:bagpipper

自从$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\'
         )
    ) 
);
你有post-type游戏的metakeys游戏标签吗?您是否也在使用WP\\u查询?或get\\u posts()?

相关推荐

Foreach循环内的if/ellif in_array仅显示一个POST的问题

如果某个类别的帖子对应一个类别,我会尝试为每个帖子指定一个特定的背景色。我的函数可以工作,但仅限于在结果中显示一篇文章。如果我删除此功能,将显示所有帖子。更多信息:在我的页面上,我有按类别筛选帖子的按钮。如果单击一次,我将显示该类别的所有帖子。但每个帖子都包含几个类别。我选择了一些类别来为每个帖子设置背景色,但这些类别与过滤器按钮不同。Wordpress显示此错误;您的站点出现严重错误,请了解有关调试WordPress的详细信息"E;在显示第一个帖子之后。以下是我的全部代码:<?php&#x