wordpress pre_get_posts()中的另一个 meta_query返回0个结果

snz8szmq  于 2023-06-21  发布在  WordPress
关注(0)|答案(2)|浏览(106)

多年来,我一直在使用堆栈溢出,我总是可以找到一个答案(或一半的答案,我可以缝合在一起),但这次我真的不能弄清楚这一点…
因此,我有一个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,但如果它有帮助,我会发布它。
先谢谢你了!佩德罗

hs1rzwqc

hs1rzwqc1#

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

swvgeqrz

swvgeqrz2#

用于基于ACF Post Object字段(inicia_areas)过滤帖子的 meta查询。 meta_query未正确设置为按CPT A和CPT B之间的关联进行筛选。

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 - Use post__in to filter by associated posts
                if ($filter_areas && count($filter_areas) > 0) {
                    $associated_posts = get_posts(array(
                        'post_type'      => 'cpt_b', // Replace with the CPT B slug
                        'post_status'    => 'publish',
                        'posts_per_page' => -1,
                        'fields'         => 'ids',
                    ));

                    $query->set('post__in', $associated_posts);
                }

                $query->set('posts_per_page', 12);
            }

            return $query;
        }
    }
    add_action('pre_get_posts', 'wpsites_query');

相关问题