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

WordPress插件XE Preview参数类型警告报错求助

解决XE Preview插件的「第一个参数必须是对象或现有类的名称」警告

错误原因定位

警告出现在第24行的property_exists($data,"data"),核心问题是$data不符合property_exists的参数要求:

  • 当API请求失败(如主机禁用file_get_contents、网络超时),file_get_contents返回false,json_decode(false)得到null,此时property_exists(null, "data")触发警告。
  • 若API返回JSON数组而非对象,json_decode默认返回数组,property_exists无法用于数组类型。

修复方案

1. 替换file_get_contents为CURL(更可靠的请求方式)

多数主机会禁用allow_url_fopen导致file_get_contents无法请求外部API,改用CURL可避免此问题,同时能获取HTTP状态码判断请求是否成功。

2. 严格校验json_decode结果

调用property_exists前,先确认$data是对象,避免传入null或数组。

修改后的核心代码

function render($attributes){
    $key= 0;
    $out ="";
    if (isset($attributes["key"])){
        $key = $attributes["key"];
    }
    $url = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
    $catid = 0;
    if(isset($_GET['catid'])) {
        $catid = $_GET['catid'];
    }
    $api_url = "https://xeev.app/en/tmpl_api_v3?key=$key&catid=$catid";
    
    // 使用CURL发起API请求
    $ch = curl_init($api_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $j_data = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    // 检查请求是否成功
    if ($j_data === false || $http_code !== 200) {
        error_log("XE Preview API请求失败:状态码{$http_code}");
        return $out;
    }
    
    $data = json_decode($j_data);
    
    // 确保$data是对象且存在data属性
    if (is_object($data) && property_exists($data,"data")){
        ob_start();
        include(XEP_PLUGIN_VIEWS_DIR."list.php");
        $out = ob_get_contents();
        ob_end_clean();
    }
    return $out;
}

额外排查建议

  • 直接在浏览器中访问拼接好的$api_url,查看返回的JSON格式是否正确,是否包含data字段。
  • 开启WordPress调试模式(设置WP_DEBUG=true),查看wp-content/debug.log获取更详细的错误信息。
  • 确认主机防火墙、安全插件未阻止对外请求到xeev.app。

内容的提问来源于stack exchange,提问作者Digital HOST Services

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:20:23