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

调用Iframely API存JSON到自定义字段时出现htmlspecialchars参数类型警告

报错原因

你当前使用的ACF(Advanced Custom Fields)版本对字段值类型校验更严格:

  1. 代码中json_decode( wp_remote_retrieve_body( $response ), true )第二个参数设为true,会把API返回的JSON字符串解析为数组格式
  2. 你要写入的自定义字段field_61942d74195e7的字段类型为文本、文本域这类仅接受字符串输入的类型
  3. ACF存储字段值前会调用WordPress核心的htmlspecialchars()函数做转义处理,该函数仅接受字符串参数,传入数组就会触发你看到的警告
    5年前开发时的旧版ACF对非匹配类型的传入值容错性更高,所以当时运行没有问题,现在新版ACF收紧了校验逻辑就触发了报错。
解决方案

你可以根据自己的使用需求选任意一种方案:

  • 方案1(无代码修改,推荐):进入WordPress后台的ACF字段管理界面,将field_61942d74195e7对应的自定义字段类型修改为「JSON字段」或者「组字段」,这类字段支持直接存储数组结构,不需要改动现有代码即可正常运行。
  • 方案2(修改少量代码,保留完整数据):不对API返回结果做解码,直接存储原始JSON字符串,修改对应代码行即可:
    把原代码中的
    $api_response = json_decode( wp_remote_retrieve_body( $response ), true );
    
    替换为
    $api_response = wp_remote_retrieve_body( $response );
    
    后续需要调用字段内的数据时,再用json_decode( get_field('field_61942d74195e7'), true )解析为数组使用即可。
  • 方案3(仅存所需数据,性能最优):如果不需要存储API返回的全部内容,只需要提取指定字段的值,就从解码后的数组中取出对应字符串存入字段即可,例如只需要存储页面摘要的话,代码可以写成:
    $api_response_data = json_decode( wp_remote_retrieve_body( $response ), true );
    // 提取摘要字段,不存在的话存空字符串避免报错
    $api_response = $api_response_data['meta']['description'] ?? '';
    
额外优化建议

建议在代码中增加API请求成功的校验逻辑,避免API请求失败时存储异常值,优化后完整代码如下:

function post_extra_save( $post_id, $post){
    global $pagenow;
    if ($pagenow == 'post.php') {
        if ( has_post_format('link', $post_id)) {
            $url = get_post_field('post_content', $post_id);
            $api_key = get_field_object('api_key', 'option')['value'] ?? '';
            if (empty($url) || empty($api_key)) return;
            $request_url = 'https://iframe.ly/api/iframely?url='. urlencode($url) .'&api_key='.$api_key;
            $response = wp_remote_get( esc_url_raw( $request_url ) );
            // 新增请求成功校验
            if ( !is_wp_error( $response ) && wp_remote_retrieve_response_code( $response ) == 200 ) {
                // 这里根据你选的解决方案调整api_response的处理逻辑即可
                $api_response = wp_remote_retrieve_body( $response );
                update_field('field_61942d74195e7', $api_response);
            }
        }
    }
}
add_action( 'save_post', 'post_extra_save', 10, 2 );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:36:04