在wordpress使用了微慕小程序,网站中必须要安装rest-api-to-miniprogram插件,可惜安装之后,修改网站的页面出现了wp-content/plugins/rest-api-to-miniprogram/includes/filter/ram-custom-post-fields.php on line 16 错误
一、发生问题的原因
这个错误 Fatal error: Uncaught Error: Cannot use object of type WP_REST_Response as array 发生在 ram-custom-post-fields.php 文件的第 16 行。
在 WordPress 的 REST API 中,过滤器 rest_prepare_post(该函数 custom_post_fields 很可能挂载于此)传递给回调函数的第一个参数 $_data 的类型在不同版本的 WordPress 或不同上下文中可能发生变化。
代码在第 16 行尝试像访问数组一样访问它:$content=$_data['content']['rendered'];。
因为 $_data 是对象,不能使用 ['key'] 语法,所以报错 "Cannot use object ... as array"。
二、原因分析
WordPress 核心更新导致 rest_prepare_* 过滤器传递的参数类型更加严格地定义为 WP_REST_Response 对象,而旧版插件代码没有适配造成的。
三、解决办法
需要修改custom_post_fields函数,正确处理WP_REST_Response对象
你可以打开ram-custom-post-fields.php文件,在 custom_post_fields函数内:
(1)在函数开头(global $wpdb; 之前)插入:
if ($_data instanceof WP_REST_Response) {
$data_array = $_data->get_data();
$is_response_object = true;
} else {
$data_array = $_data;
$is_response_object = false;
}
(2)使用文本编辑器的“查找替换”功能,将函数内部所有的 $_data[ 替换为 $data_array[
注意:不要替换函数参数定义里的 $_data,也不要替换最后返回逻辑里的 $_data
(3)删除或注释掉文件末尾的 $data->data = $_data; 和 return $data;大概在文件的250行左右。

后面添加如下代码
if ($is_response_object) {
$_data->set_data($data_array);
return $_data;
} else {
return $data_array;
}
修复后的页面,请下载