我遇到了过滤页面以在 WP 查询中显示的问题。
我使用 Codex WP 自定义字段查询参考 和 ACF(高级自定义字段插件 - 但这并不重要,因为它的工作原理与 WP 自定义字段相同)参数来过滤页面。
在“多自定义字段处理”段落中,Codex 提供了一个有 2 个条件的示例。我们可以使用 OR 或 AND 关系。我对两者都适用,直到你有第三个条件(数组)。
他们使用的例子:
'relation' => 'OR',
array(
'key' => 'color',
'value' => 'blue',
'compare' => 'NOT LIKE'
),
array(
'key' => 'price',
'value' => array( 20, 100 ),
'type' => 'numeric',
'compare' => 'BETWEEN'
)
它只有 2 个数组。当我放第三个时,什么也没有显示。在调试模式下我可以看到一个错误:
WordPress database error: [Lost connection to MySQL server during query]
当我使用 AND 时它有效,但我必须使用 OR。不幸的是它使 MySQL 断开连接。 我尝试向 phpMySQL 询问 WP 所做的相同查询。它引起了问题 - phpMyAdmin 说同样的:
Lost connection
有什么想法吗? 也许我应该尝试不同的过滤方法? (也许我应该使用分类法?)
这是我使用的代码:
$query_array = array('relation' => 'OR');
array_push($query_array,
array(
'key' => 'filter1',
'value' => 'value1',
'compare' => 'LIKE'
),
array(
'key' => 'filter1',
'value' => 'value2',
'compare' => 'LIKE'
),
array(
'key' => 'filter1',
'value' => 'value3',
'compare' => 'LIKE'
)
);
$args = array(
'order' => $order_array,
'meta_key' => $meta_key,
'orderby' => $orderby,
'post_type' => 'page',
'paged' => $paged,
'post__in' => $postIDs,
'posts_per_page' => 12,
'paged' => get_query_var('paged'),
'meta_query' => $query_array
);
query_posts($args);
?>
($args 的变量当然是设置的)
不知道为什么不能用
'compare' => '='
但这可能就是我不能使用的原因:
$query_array = array('relation' => 'OR');
array_push($query_array,
array(
'key' => 'filter1',
'value' => array('value1', 'value2', 'value3'),
'compare' => 'IN'
)
);
只是想说你的评论对我有帮助;一段时间以来,我一直在努力解决一个非常相似的问题。我也在使用 ACF,并且使用它将一种帖子类型的项目附加到另一种自定义帖子类型很容易 - 例如,将 Person_1 和 Person_3 附加到“Project_A”。
这使得列出哪些用户附加到特定项目变得很容易。但当反过来做同样的事情时——显示哪些项目附加到哪些用户——这就变得非常令人头疼了。
我终于弄清楚了,部分归功于您的评论 - 我将在这里发布我的解决方案,以防其他人遇到同样的问题:
$args = array(
'numberposts' => -1,
'post_type' => 'project',
'meta_query' => array(
'relation' => 'IN',
array(
'key' => 'people',
'value' => ';s:1:"' . $person->ID . '";',
'compare' => 'LIKE'
)
)
);
简而言之:因为转发器字段等中的 ACF 值是序列化的,所以比较关键字必须是“LIKE”,并且我向该值添加了一些上下文以消除错误返回 - 只需搜索像“1”这样的 ID 就会匹配很多(错误的)帖子,但“;s1;”部分确保给定值位于索引 1,在我的例子中,这是正确的索引。
因此需要根据具体情况进行调整。检查您尝试与 var_dumping "get_post_meta($post->ID, 'people')" 匹配的内容有助于获得正确的值。