You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于嵌套字段过滤REST API数据?WordPress ACF字段过滤语法咨询

解决WordPress REST API过滤ACF hidden字段的问题

嘿,我明白你的困扰了——默认的WP REST API确实不支持直接通过[acf][hidden]=false这种语法来过滤ACF子字段,这就是为什么你的请求返回了所有文章。下面给你两种可行的解决方案:

方法一:自定义REST API过滤参数(推荐)

你可以通过在主题的functions.php文件中添加一段代码,注册一个自定义的过滤参数,让API能够识别并处理ACF的hidden字段过滤:

add_filter( 'rest_post_query', 'filter_posts_by_acf_hidden', 10, 2 );
function filter_posts_by_acf_hidden( $args, $request ) {
    // 获取请求中的acf_hidden参数
    $hidden_value = $request->get_param( 'acf_hidden' );
    
    if ( isset( $hidden_value ) ) {
        // 转换布尔值为数据库存储的整数(ACF将true存为1,false存为0)
        $db_value = $hidden_value === 'true' ? 1 : 0;
        
        $args['meta_query'] = array(
            array(
                'key'     => 'hidden', // 对应ACF字段的键名
                'value'   => $db_value,
                'type'    => 'numeric',
                'compare' => '='
            )
        );
    }
    
    return $args;
}

添加这段代码后,你就可以用下面的URL来过滤hidden为false的文章:

mysite.com/wp-json/wp/v2/posts?acf_hidden=false

方法二:直接使用原生meta参数(无需代码)

因为ACF的字段会存储在WordPress的wp_postmeta表中,布尔类型的hidden字段实际存储的是1(true)或0(false),所以你可以直接用原生的REST API meta过滤参数:

要获取hidden为false的文章,使用这个URL:

mysite.com/wp-json/wp/v2/posts?meta_key=hidden&meta_value=0&meta_compare==

注意事项

  • 如果你ACF的hidden字段是在某个字段组里,键名可能会带前缀,比如group_name_hidden,这时候需要把meta_key改成对应的实际键名(可以在数据库的wp_postmeta表中查看)。
  • 原生meta参数的meta_compare需要明确指定为=,否则可能会出现不符合预期的结果。

内容的提问来源于stack exchange,提问作者BrownBe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:11:42