带有 ACF 嵌套字段的 WP MetaQuery

WP MetaQuery with ACF nested fields

好的,所以我需要获取与当前 post 相关的所有 post。这是通过查询的 post 上的关系字段设置的,而不是我当前的关系字段。但奇怪的是,关系字段嵌套在用于在页面上重复块的转发器字段中。 所以在我的 "block_repeater" 中有一个关系字段 "block_relations" 并且我的查询如下所示:

$args = array(
            'post_type' => array('post', 'page'),
            'meta_key' => 'block_relations',
            'value' => '"' . $post->ID . '"',
            'compare' => 'LIKE',
        );
$q = new WP_Query($args);

这个查询 returns 没有,我认为这是因为嵌套。在我的数据库 "postmeta" table 中,"block_relations" 的条目看起来像 "blocks_0_block_relations"、"blocks_1_block_relations" 等。 有没有一种方法可以在一个查询中执行此操作,而不是查询所有具有 "blocks" 转发器的 post,然后 foreach 获取我的字段并测试它是否具有适当的值?

您的 $args 数组不正确

$args = array(
    'post_type' => array('post', 'page'),
    'meta_query' => array( array(
      'key' => 'block_relations',
      'value' => $post->ID,
      'compare' => 'LIKE',
    ) )
);
$q = new WP_Query($args);

我找到了解决方案,但并不完美。问题是您必须按 "blocks_0_block_relations" 键,但元查询使用 equals(=) 运算符搜索 meta_key 因此您必须制作自定义过滤器以过滤掉您的特定查询并将其更改为使用喜欢比较。 解决方案:

$args = array(
    'post_type' => array('post', 'page'),
    'meta_query' => array( 
        array(
            'key' => 'blocks_$_block_relations',
            'value' => $post->ID,
            'compare' => 'LIKE',
             ) 
        ),
    );
$q = new WP_Query($args);

以及更改 where 子句的自定义过滤器:

function my_posts_where( $where ) { 
    $where = str_replace("meta_key = 'blocks_$", "meta_key LIKE 'blocks_%", $where);
    return $where;
}

add_filter('posts_where', 'my_posts_where');