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

WordPress插件中PHP类内部调用成员函数报错的排查及正确调用方法咨询

问题分析与解决方案

你遇到的问题根本不是类内函数调用的语法错误,而是短代码回调的调用上下文不匹配导致的致命错误——PHP致命错误会直接让页面空白(如果服务器没开启前端错误显示的话),错误日志没记录大概率是服务器的错误日志配置没开或者路径不对。

错误根源

当你用add_shortcode("pd", array("pdCategories","ShortcodeParse_c"));注册短代码时,WordPress会以静态方法的形式调用ShortcodeParse_c。但静态方法里是没有$this的——$this只有在类的实例对象中才有意义,静态调用时没有实例,所以你写$this->ShowCategories_c()会触发「Using $this when not in object context」的致命错误,直接导致页面空白。

而你注释掉$this->...的代码能正常运行,是因为那时候静态调用ShortcodeParse_c时没有使用$this,不会触发错误。

两种解决方案

方案一:使用类实例注册短代码(推荐)

你已经实例化了$pd = new pdCategories();,只需要把短代码注册改成用这个实例绑定方法即可,这样WordPress会调用实例的方法,$this就会正确指向这个实例:

<?php
class pdCategories {
    public function ShortcodeParse_c($atts) {
        $temp = "";
        $temp.= "test<br>";
        $temp.= $atts["category"];
        $temp.= $this->ShowCategories_c($atts["category"]); // 现在能正常调用了
        return $temp;
    }
    private function ShowCategories_c($kats) {
        $temp = "starting...<br>";
        return $temp;
    }
}

// 先定义类,再实例化,最后用实例注册短代码(更规范)
$pd = new pdCategories();
add_shortcode("pd", array($pd, "ShortcodeParse_c"));
?>

方案二:改用静态方法调用(适合无实例状态的场景)

如果你的类不需要维护实例状态(比如不需要使用类的成员变量),可以把两个方法都改成静态方法,调用时用self::代替$this->:

<?php
class pdCategories {
    public static function ShortcodeParse_c($atts) {
        $temp = "";
        $temp.= "test<br>";
        $temp.= $atts["category"];
        $temp.= self::ShowCategories_c($atts["category"]); // 静态方法用self::调用
        return $temp;
    }
    private static function ShowCategories_c($kats) {
        $temp = "starting...<br>";
        return $temp;
    }
}

// 静态方法注册短代码的方式不变
add_shortcode("pd", array("pdCategories","ShortcodeParse_c"));
?>

额外调试提示

如果想看到具体的错误信息,可以在WordPress的wp-config.php里开启调试模式:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);

这样错误会直接显示在页面上,或者写入wp-content/debug.log文件,方便后续排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:32:32