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

WordPress无法读取JSON文件填充结账下拉框,求助

WordPress中读取本地JSON文件并填充下拉框的问题解决办法

问题背景

将包含俄罗斯取货点数据的JSON文件放置在WordPress的wp-content/uploads/cities.json路径下,尝试通过wp_remote_get发起HTTP请求读取数据并填充结账页面的城市下拉框,但始终无法获取到JSON数据,尝试其他方法也未解决。

核心问题分析

使用wp_remote_get读取本地文件容易遇到HTTP层面的问题(比如服务器配置限制、URL解析错误),同时原代码存在变量作用域问题(函数外部定义的$city_names无法在函数内部访问),另外JSON文件的放置也有一些需要注意的规范。

解决办法

1. 本地JSON文件的正确读取方式

直接通过文件系统读取本地文件比HTTP请求更可靠,使用WordPress内置常量构建绝对路径,避免路径错误:

  • WP_CONTENT_DIR:指向WordPress的wp-content目录的绝对路径,确保跨环境兼容性

2. JSON文件的放置要求

  • 权限设置:确保uploads目录权限为755,JSON文件权限为644,保证Web服务器用户(如www-data)能读取文件
  • 路径与大小写:Linux服务器区分文件名大小写,确保文件名和路径拼写完全匹配
  • JSON格式合法性:检查文件是否存在语法错误(如遗漏逗号、引号不匹配),可通过本地文本编辑器的JSON语法校验功能确认

3. 修正后的代码示例

add_action('woocommerce_after_checkout_shipping_form', 'add_custom_dropdown_after_shipping_form');

function add_custom_dropdown_after_shipping_form() {
    // 仅在结账主页面执行
    if (!is_checkout() || is_wc_endpoint_url()) {
        return;
    }

    // 构建JSON文件的绝对路径
    $json_file_path = WP_CONTENT_DIR . '/uploads/cities.json';
    $city_names = [];

    // 检查文件是否存在且可读
    if (file_exists($json_file_path) && is_readable($json_file_path)) {
        $json_content = file_get_contents($json_file_path);
        $cities_data = json_decode($json_content);

        // 验证JSON解析是否成功且数据结构正确
        if (json_last_error() === JSON_ERROR_NONE && !empty($cities_data->cities)) {
            foreach ($cities_data->cities as $city) {
                // 过滤空的城市名称
                if (!empty($city->name)) {
                    $city_names[] = $city->name;
                }
            }
        } else {
            echo '<p>JSON解析失败或数据格式不符合预期</p>';
        }
    } else {
        echo '<p>无法读取JSON文件,请检查文件路径和权限</p>';
    }

    // 输出安全转义后的下拉框
    echo '<select id="city-dropdown">';
    echo '<option value="">选择城市</option>';
    foreach ($city_names as $city_name) {
        echo '<option value="' . esc_attr($city_name) . '">' . esc_html($city_name) . '</option>';
    }
    echo '</select>';
}

4. 额外排查步骤

  • 开启WordPress调试模式:在wp-config.php中设置define('WP_DEBUG', true);,查看是否有相关报错信息
  • 检查服务器错误日志:查看Apache/Nginx的错误日志,排查文件读取权限或路径相关的问题
  • 简化测试:先单独编写一段简单的代码测试JSON文件读取,确认文件能正常解析后再集成到结账逻辑中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:43:15