如何在WordPress中将PHP变量$hatus的值写入JSON文件
问题诊断与修复方案
现存问题
- 变量作用域错误:
$hatus变量没有在publish_post绑定的匿名函数作用域内定义,也没有通过参数传递、全局声明的方式引入到函数内部,函数运行时无法读取到该变量的值,json_encode实际处理的是未定义的空值。 - 冗余代码残留:代码中调用
wp_remote_get请求WordPress REST接口的逻辑和你存储$hatus的需求完全无关,属于无效冗余代码。 - 内容未做安全过滤:你之前输出
$hatus时用了wp_kses_post做内容过滤,写入JSON时没有做对应的处理,可能引入非法字符导致JSON格式损坏。 - 存储路径不可靠:直接用相对路径
your_api_data_backup.json写入文件,实际运行时的路径会受PHP当前执行目录影响,大概率无法写入到你预期的位置,甚至触发权限错误。
修复方案
最终可用代码
<?php // 导出$hatus数据到JSON文件 add_action('publish_post', function ($ID, $post) use ($hatus) { // 通过use引入作用域外的$hatus变量 // 对内容做安全过滤,和你之前的输出逻辑保持一致 $filtered_hatus = wp_kses_post($hatus); // 生成JSON数据,加JSON_UNESCAPED_UNICODE参数避免中文被转码 $responseData = json_encode(['hatus' => $filtered_hatus], JSON_UNESCAPED_UNICODE); // 用WordPress内置常量ABSPATH指定根目录作为存储路径,可自行修改到其他有写入权限的目录 $file_path = ABSPATH . 'your_api_data_backup.json'; file_put_contents($file_path, $responseData); }, 10, 2); ?>
补充说明:如果你的
$hatus是当前发布文章的自定义字段,直接在函数内部读取更稳妥,不需要依赖外部变量,只需要把函数内部第一行换成$hatus = get_post_meta($ID, '你的自定义字段名', true);,同时去掉use ($hatus)的引入逻辑即可,可彻底避免作用域问题。
内容的提问来源于stack exchange,提问作者Johan
相关产品推荐
相关产品推荐

