如何基于嵌套字段过滤REST API数据?WordPress ACF字段过滤语法咨询
嘿,我明白你的困扰了——默认的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
相关产品推荐
相关产品推荐

