使用带有多个数组的 meta_query 过滤自定义帖子类型存档页面,使用 acf 关系字段

Posted

技术标签:

【中文标题】使用带有多个数组的 meta_query 过滤自定义帖子类型存档页面,使用 acf 关系字段【英文标题】:filter custom post type archive page using meta_query with multiple arrays using acf relationship field 【发布时间】:2015-06-16 21:50:46 【问题描述】:

正如标题所示,我正在尝试使用 meta_query 过滤自定义帖子类型存档页面,该页面使用 acf 关系字段的多个数组。

这是迄今为止我使用 acf 的文档和教程所获得的内容。如果我使用'relation' => 'AND',关键字过滤器和 project_ref 过滤器都独立工作,但只有关键字使用'OR'并且永远不会一起工作。另外,project_ref 是一个帖子 ID。

 // functions.php
   $meta_query = $query->get('meta_query');

        // allow the url to alter the query
        if( !empty($_GET['keywords']) OR !empty($_GET['project_ref']) )
        
          $keywords = explode(',', $_GET['keywords']);
          $projects = $_GET['project_ref'];

          // Add our meta query to the original meta queries
          $meta_query[] = array(
            'relation' => 'OR',
            array(
              'key'   => 'keywords',
              'value'   => $keywords,
              'compare' => 'LIKE'
            ),
            array(
              'key' => 'project_ref',
              'value' => $projects,
              'compare' => 'LIKE'
            )
          );
        

因此,如果我的网址是 website.com/customposttype/?keywords=one,two&project_ref=684,则帖子按关键字过滤,而不是 project_ref 帖子 ID。我也收到一个错误警告:trim() 期望参数 1 是字符串,数组在 .../wp-includes/meta.php 第 1400 行给出。

任何帮助将不胜感激。我觉得我很接近了,但我肯定似乎错过了一些东西。

提前致谢。

【问题讨论】:

【参考方案1】:

您可能对查询的关键字部分使用了错误的比较值。

根据WP_Query codex entry:

value (string|array) - 自定义字段值。它只能是一个数组 当比较是“IN”、“NOT IN”、“BETWEEN”或“NOT BETWEEN”时。你不 使用“EXISTS”或“NOT EXISTS”时必须指定一个值 WordPress 3.9 及更高版本中的比较。

由于您的错误表明您正在传递一个数组。在 SQL 中,当您想要检查是否存在多个必需值时,您将使用 IN 比较选项。

所以你的代码是:

 // functions.php
   $meta_query = $query->get('meta_query');

        // allow the url to alter the query
        if( !empty($_GET['keywords']) OR !empty($_GET['project_ref']) )
        
          $keywords = explode(',', $_GET['keywords']);
          $projects = $_GET['project_ref'];

          // Add our meta query to the original meta queries
          $meta_query[] = array(
            'relation' => 'OR',
            array(
              'key'   => 'keywords',
              'value'   => $keywords,
              'compare' => 'IN'
            ),
            array(
              'key' => 'project_ref',
              'value' => $projects,
              'compare' => 'LIKE'
            )
          );
        

【讨论】:

以上是关于使用带有多个数组的 meta_query 过滤自定义帖子类型存档页面,使用 acf 关系字段的主要内容,如果未能解决你的问题,请参考以下文章

如何向 meta_query 添加过滤器,例如仅查找 Roma Numeric

WP_查询 |数组序列化形式的 meta_query 参数元值

在 Wordpress meta_query 中使用动态多维数组

php wp_query多个meta_query参数

带有多个 sortDescriptor 和 Bool 过滤器的 Swift fetchRequest

如何使用过滤器在数组中搜索对象的多个键值?