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

时间:2015-04-11 03:55:50

标签: php arrays wordpress advanced-custom-fields

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

这是我到目前为止使用acf的文档和教程。如果我使用'关系'关键字过滤器和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为字符串,数组在第1400行的/ wp-includes / meta.php中给出

非常感谢任何帮助。我觉得我很接近,但我似乎肯定错过了什么。

提前致谢。

1 个答案:

答案 0 :(得分: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'
            )
          );
        }