pre_get_posts() 中的另一个元查询返回 0 个结果

问题描述 投票:0回答:1

多年来我一直在使用堆栈溢出,我总能找到答案(或者我可以缝合在一起的一半答案),但这次我真的无法弄清楚......

因此,我有一个 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,但如果有帮助,我会发布它。

提前致谢! 佩德罗

php wordpress advanced-custom-fields meta-query
1个回答
0
投票

meta_query
正在检查
inicia_areas
元是否等于
central-de-compras
,但元数据的值是整数数组,这就是查询不返回任何结果的原因。调整您的元数据或查询,以便类型匹配或逻辑期望正确的类型。

© www.soinside.com 2019 - 2024. All rights reserved.