使用WordPress REST API显示图片问题:返回内容为字符串而非图片
解决WordPress REST API直接返回QR图片的问题
你的核心问题是设置了image/gif的响应头,但却返回了HTML字符串,这和你想要的直接输出图片流的逻辑矛盾。quickchart这类服务是直接返回图片二进制数据,浏览器根据Content-Type识别为图片并渲染,而非返回HTML标签。
修改后的代码
add_action( 'rest_api_init', function () { register_rest_route( 'api/v1', '/product/', array( 'methods' => 'GET', 'callback' => 'ea_get_product_data', ) ); } ); function ea_get_product_data( $data ) { $identifier = $data->get_param( 'identifier' ); if ( empty( $identifier ) ) { return new WP_Error( 'missing_param', 'identifier参数不能为空', array( 'status' => 400 ) ); } require get_template_directory() . '/inc/qr-code/qrcode.php'; // 生成QR码图片 $qr = QRCode::getMinimumQRCode($identifier, QR_ERROR_CORRECT_LEVEL_L); $img = $qr->createImage(8, 8, 0x000000, 0xFFFFFF, false); // 直接输出图片流,跳过REST响应的默认JSON处理 header( 'Content-Type: image/gif' ); imagegif($img); imagedestroy($img); exit; }
关键改动说明
- 移除HTML标签包裹:不再用
<img>标签,直接输出图片的二进制数据 - 直接设置响应头并输出:使用原生
header()设置Content-Type,调用imagegif()直接输出图片,最后exit终止程序,避免WordPress后续的REST响应处理把输出转换成JSON字符串 - 增加参数校验:如果
identifier为空,返回错误提示,避免生成空的QR码
调用your-site/wp-json/api/v1/product/?identifier=abc123时,浏览器会直接显示QR图片,和quickchart的效果一致。
内容的提问来源于stack exchange,提问作者Never Stop Learning
相关产品推荐
相关产品推荐

