正如标题所示,我试图使用带有多个数组的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中给出。
非常感谢任何帮助。我觉得我很接近,但我似乎肯定错过了什么。
提前致谢。
答案 0 :(得分:1)
您可能会在查询的关键字部分使用错误的比较值。
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'
)
);
}