多年来,我一直在使用堆栈溢出,我总是可以找到一个答案(或一半的答案,我可以缝合在一起),但这次我真的不能弄清楚这一点…
因此,我有一个ACF帖子对象字段(inicia_areas),它将一个或多个自定义帖子类型(CPT)B的帖子关联到CPT A帖子。
目标是能够过滤CPT A的档案中的具有与其相关联的CPT B帖子的帖子。没什么特别的:)
我使用pre_get_posts()钩子,因为我可以通过这种方式按类别过滤帖子。
出于测试目的,我简化了pre_get_posts()函数,并将值硬编码到 meta_query中。然后,我将三个CPT A帖子与Slug“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,但如果它有帮助,我会发布它。
先谢谢你了!佩德罗
2条答案
按热度按时间hs1rzwqc1#
meta_query
正在检查inicia_areas
meta是否等于central-de-compras
,但元数据的值是一个整数数组,这就是查询不返回任何结果的原因。调整您的 meta数据或查询,以便类型匹配或逻辑需要正确的类型。swvgeqrz2#
用于基于ACF Post Object字段(inicia_areas)过滤帖子的 meta查询。 meta_query未正确设置为按CPT A和CPT B之间的关联进行筛选。