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

如何在WordPress中用PHP解码API返回的多维数组格式JSON数据

问题排查&修复方案

你代码一共存在4个核心问题:

  • 没有做错误兼容处理:API请求失败、JSON解析失败时直接取数组键会抛出PHP警告
  • WordPress环境不推荐用file_get_contents发起外部请求:多数主机默认禁用allow_url_fopen配置,会导致请求失败,应使用WordPress内置的HTTP API
  • JSON结构遍历逻辑错误:接口返回的$datetim['times']本身就是包含Sunrise等键的一维关联数组,不需要再嵌套遍历,你额外加了一层foreach遍历times,会直接取到各个时间的字符串值,自然取不到Sunrise键
  • 短代码回调函数直接输出内容违反WordPress规范:短代码的返回值才会插入到内容对应位置,直接echo会导致内容输出到页面错误位置

修复后可直接运行的代码

function decode_func(){
    // 使用WordPress内置HTTP API发起请求
    $response = wp_remote_get('https://api.pray.zone/v2/times/today.json?city=jakarta');
    // 校验请求是否成功
    if(is_wp_error($response) || wp_remote_retrieve_response_code($response) != 200){
        return '请求数据失败';
    }
    $json = wp_remote_retrieve_body($response);
    $decoded_json = json_decode($json,true);
    // 校验JSON解析是否成功、结构是否符合预期
    if(json_last_error() !== JSON_ERROR_NONE || !isset($decoded_json['results']['datetime'])){
        return '数据解析失败';
    }
    $output = '';
    // 直接遍历datetime数组,不需要多层无效嵌套
    foreach($decoded_json['results']['datetime'] as $item){
        // 直接取times下的Sunrise字段即可
        if(isset($item['times']['Sunrise'])){
            $output .= esc_html($item['times']['Sunrise']).'<br>';
        }
    }
    return $output;
}
add_shortcode('decode','decode_func');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:36:03