wp_remote_get传[]参数URL报错 如何限制WP REST API返回字段
报错原因
手动在URL中拼接未编码的[]方括号传递多值参数不符合URL编码规范,wp_remote_get()底层的HTTP请求处理器会将未转义的方括号判定为非法URL字符,直接触发致命错误。WP REST API的响应字段裁剪不需要强制使用数组格式传参,以下两种方案均可稳定实现需求:
实现方案
方案1:使用逗号分隔的_fields参数(最简便)
WP REST API原生支持_fields参数接收逗号分隔的字段列表,完全不需要传数组格式,直接拼接在URL中即可正常生效,不会触发方括号相关错误,裁剪效果和数组传参完全一致:
wp_remote_get('https://www.example.com/wp-json/wp/v2/custom_post_type/?_fields=link,content,featured_media&per_page=100');
如果需要获取嵌套字段,直接在列表中用点号声明路径即可,例如_fields=link,title.rendered,content.rendered,featured_media。
方案2:通过请求配置数组传递查询参数(适合多参数场景)
如果需要传递的请求参数较多,手动拼接URL容易出错,可以将所有查询参数放到请求配置的query键下,以数组形式声明多值参数,WordPress会自动完成URL编码和参数格式处理,不需要手动书写[]:
$response = wp_remote_get( 'https://www.example.com/wp-json/wp/v2/custom_post_type/', [ 'query' => [ '_fields' => ['link', 'content', 'featured_media'], 'per_page' => 100 ], 'timeout' => 15 // 可按需配置超时等其他请求参数 ] );
这种写法会自动规避非法字符问题,同时避免手动拼接URL可能出现的参数遗漏、编码错误问题。
注意事项
- 禁止手动在URL中书写未经过URL编码的
[]字符,如果确实需要手动拼接多值参数,可先通过http_build_query()处理参数数组得到合法的查询字符串后,再拼接到URL上。 - 使用
query配置项传递参数时,不要在传入的接口URL末尾提前加?,WordPress会自动拼接查询字符串前缀。
内容的提问来源于stack exchange,提问作者Screenload
相关产品推荐
相关产品推荐

