使用带有多个数组的 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 中使用动态多维数组