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

WordPress插件中函数内调用函数是否允许?页面加载异常求助

问题分析与解决方案

首先得说,你的代码里藏着一个致命错误,这就是页面加载失败的核心原因:在outputprice()函数里,你用了$this->latest_price()来调用另一个函数,但$this只有在类的成员方法内部才有意义,而你的这两个函数都是独立的全局函数,不是类的方法,所以这里的$this是未定义的,会直接触发致命错误。至于调试模式没看到错误,大概率是你的WordPress调试配置没完全开启(比如wp_debug_display没设为true,导致错误没显示在页面上)。

不用OOP的快速修复方案

直接修改outputprice()里的调用方式,同时遵循WordPress短代码的最佳实践——返回内容而非直接echo(避免输出顺序混乱),再加上空值判断防止报错:

function latest_price(){ 
    global $wpdb; 
    // 用$wpdb->prefix代替硬编码的wp_,适配自定义数据库前缀的情况
    $result = $wpdb->get_results("SELECT bid,ask FROM {$wpdb->prefix}ticker ORDER BY indate DESC limit 1"); 
    // 增加空值判断,避免$result为空时触发报错
    if (!empty($result) && isset($result[0]->bid)) {
        return $result[0]->bid;
    }
    return '暂无数据'; // 兜底返回内容
} 

function outputprice(){ 
    $output = latest_price(); // 直接调用全局函数,不需要$this
    return $output; // 短代码函数必须返回内容,不要直接echo
} 

add_shortcode ('getprice', 'outputprice');

是否需要采用OOP方式?

不是必须的!如果你的插件功能很简单,就这两个函数,用普通全局函数完全能正常工作。但如果之后你要给插件扩展更多功能,OOP方式会更利于代码的组织、封装和维护,比如把相关功能都封装到一个类里:

class Latest_Price_Plugin {
    public function latest_price(){ 
        global $wpdb; 
        $result = $wpdb->get_results("SELECT bid,ask FROM {$wpdb->prefix}ticker ORDER BY indate DESC limit 1"); 
        if (!empty($result) && isset($result[0]->bid)) {
            return $result[0]->bid;
        }
        return '暂无数据';
    } 

    public function outputprice(){ 
        return $this->latest_price(); // 这里用$this就合法了,因为是类的成员方法
    } 
}

// 实例化类并注册短代码
$price_plugin = new Latest_Price_Plugin();
add_shortcode('getprice', array($price_plugin, 'outputprice'));

这种写法能避免全局函数污染,后续扩展功能时也更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:04:20