多年来我一直在使用堆栈溢出,我总能找到答案(或者我可以缝合在一起的一半答案),但这次我真的无法弄清楚......
因此,我有一个 ACF 帖子对象字段 (inicia_areas),它将自定义帖子类型 (CPT) B 的一个或多个帖子关联到 CPT A 帖子。
目标是能够过滤 CPT A 档案中与 CPT B 帖子相关的帖子。没什么太花哨的:)
我正在使用 pre_get_posts() 挂钩,因为我能够通过这种方式按类别过滤帖子。
出于测试目的,我简化了 pre_get_posts() 函数并将值硬编码在 meta_query 中。然后,我将三个 CPT A 帖子与标题“central-de-compras”关联起来,以获得一些结果。
代码:
function wpsites_query($query)
{
if ($query->is_main_query() && !is_admin()) {
if (is_post_type_archive('iniciativas')) {
// these vars return arrays from form
global $filter_areas, $filter_temas;
// -> Categories Filter - WORKING
if ($filter_temas && count($filter_temas) > 0) {
$cat_ids = [];
foreach ($filter_temas as $temas) {
array_push($cat_ids, get_term_by('slug', $temas, 'category')->term_id);
}
$query->set('category__in', $cat_ids);
}
// -> ACF Filter - RETURNING NO POSTS
if ($filter_areas && count($filter_areas) > 0) {
$query->set(
'meta_query',
array(
array(
'key' => 'inicia_areas',
'value' => 'central-de-compras',
'compare' => '='
)
)
);
}
$query->set('posts_per_page', 12);
}
return $query;
}
}
add_action('pre_get_posts', 'wpsites_query');
if($filter_areas... 返回 true,因此正在设置查询。 我尝试了“post-name”和“ID”的值,并与“=”、“LIKE”、“==”、“EXIST”进行比较。将值转换为数组并使用“IN”比较,但什么也没有。零结果。
我没有发布查询输出,因为 TLDR,但如果有帮助,我会发布它。
提前致谢! 佩德罗
meta_query
正在检查inicia_areas
元是否等于central-de-compras
,但元数据的值是整数数组,这就是查询不返回任何结果的原因。调整您的元数据或查询,以便类型匹配或逻辑期望正确的类型。