JetEngine对接WordPress:API Item Path识别失败与JSON格式适配问题
解决方案:JetEngine对接不合规JSON API的处理方法
1. 能否跳转至合规JSON的外部链接?
JetEngine不支持自动跳转操作,但如果存在现成的合规JSON接口,直接把该接口的URL替换到JetEngine的API配置项里即可,无需额外跳转设置。
2. 如何格式化JSON让JetEngine读取?
最直接的方式是通过WordPress钩子修改API返回内容,把原JSON转换成JetEngine能识别的结构:
- 在主题的
functions.php文件或自定义插件中添加以下代码,通过jet-engine/listings/source/request/response钩子拦截并处理API响应:
add_filter( 'jet-engine/listings/source/request/response', function( $response, $request_args, $source ) { // 仅针对目标API源修改,替换成你的API源名称 if ( '你的API源名称' !== $source->get_name() ) { return $response; } // 解析原API返回的JSON $data = json_decode( $response, true ); // 提取JetEngine需要的数组结构(示例为从Veiculos->Veiculo提取) if ( isset( $data['Veiculos']['Veiculo'] ) && is_array( $data['Veiculos']['Veiculo'] ) ) { $response = json_encode( $data['Veiculos']['Veiculo'] ); } return $response; }, 10, 3 );
- 也可以用外部脚本(如Node.js、PHP脚本)预先抓取并格式化原API数据,但用WordPress钩子的方式更贴合现有环境,无需额外部署。
3. 能否转发API并格式化后返回至新端点?
完全可以,你可以在WordPress中创建一个自定义REST API端点,在该端点内请求原API、格式化数据后返回,再让JetEngine调用这个自定义端点:
- 同样在
functions.php或自定义插件中添加代码:
add_action( 'rest_api_init', function () { // 注册自定义API路由 register_rest_route( 'custom/v1', '/formatted-veiculos', array( 'methods' => 'GET', 'callback' => 'custom_formatted_veiculos_api', 'permission_callback' => '__return_true', // 可根据需求调整权限控制 ) ); } ); function custom_formatted_veiculos_api( $request ) { // 替换为原API的实际URL $original_api_url = 'https://原API地址.com/xxx'; $response = wp_remote_get( $original_api_url ); if ( is_wp_error( $response ) ) { return new WP_Error( 'api_fetch_fail', '无法获取原API数据', array( 'status' => 500 ) ); } $body = wp_remote_retrieve_body( $response ); $data = json_decode( $body, true ); // 格式化数据为JetEngine需要的结构 $formatted_data = isset( $data['Veiculos']['Veiculo'] ) ? $data['Veiculos']['Veiculo'] : array(); return rest_ensure_response( $formatted_data ); }
完成后,JetEngine的API配置中填写https://你的域名/wp-json/custom/v1/formatted-veiculos,Item Path直接填/即可,因为返回的已经是标准的数据数组。
内容的提问来源于stack exchange,提问作者Rodolfo Candido Ochoa Dodo
相关产品推荐
相关产品推荐

