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

如何将JSON中的单个指定数据保存到WordPress自定义字段link_url

核心问题原因

你的代码最核心的错误是多做了一次多余的json_encode操作:wp_remote_retrieve_body()返回的本身就是Iframely接口输出的原始JSON字符串,你先对它做编码,再解码得到的只是普通字符串,不是可访问属性的对象,自然无法读取$data->url的值。此外你调用update_field时没有传入文章ID参数,也会导致字段保存失败。

修正后的完整代码

function post_extra_save( $post_id, $post){
    // 跳过自动保存、修订版本的情况
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
    if ( wp_is_post_revision( $post_id ) ) return;
    global $pagenow;
    // 仅在文章编辑页生效
    if ($pagenow == 'post.php') {
        // 仅处理链接格式的文章
        if ( has_post_format('link', $post_id)) {
            // 从文章内容读取目标URL
            $url = get_post_field('post_content', $post_id);
            if (empty($url)) return;
            // 构造请求参数获取API数据
            $api_key = get_field_object('api_key', 'option')['value'];
            $request = wp_remote_get( 'https://iframe.ly/api/iframely?url='. urlencode($url) .'&api_key='.$api_key );
            // 校验请求是否成功
            if ( is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) != 200 ) {
                return;
            }
            // 直接解析返回的JSON字符串
            $data = json_decode( wp_remote_retrieve_body( $request ) );
            // 校验JSON解析是否成功,且存在url字段
            if (json_last_error() === JSON_ERROR_NONE && isset($data->url)) {
                // 第三个参数传入文章ID,指定保存到对应文章
                update_field('link_url', $data->url, $post_id);
                // 如果需要保存其他字段,比如文章标题,可以继续加
                // update_field('link_title', $data->meta->title, $post_id);
            }
        }
    }
}
add_action( 'save_post', 'post_extra_save', 10, 2 );

改动说明

  • 移除了冗余的json_encode步骤,直接对接口返回的JSON字符串做解析
  • 新增了请求失败、JSON解析失败的校验逻辑,避免运行报错
  • 调用update_field时传入了第三个参数$post_id,明确指定自定义字段要保存的目标文章
  • 新增了自动保存、修订版本的跳过逻辑,避免重复执行或意外触发

内容的提问来源于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 21:45:03