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

WordPress插件开发问题:跨文件调用类方法添加菜单无响应

问题原因及解决方案

核心问题:激活钩子的执行时机错误

register_activation_hook 仅在插件激活瞬间执行一次,而 admin_menu 是每次进入WordPress后台都会触发的动作。你把添加admin_menu动作的代码放在激活方法里,激活完成后这个动作就不会再被注册,自然无法生效。

具体修复步骤

1. 调整钩子注册时机,移出激活方法

把加载Admin类和注册admin_menu动作的逻辑,放在插件初始化钩子(比如plugins_loaded)里,而非激活钩子:

修改1file.php代码:

defined( 'ABSPATH' ) or die('Nie masz dostępu');

class PluginRzeczoznawcy{
    public function __construct() {
        // 初始化时注册后台相关钩子
        add_action( 'plugins_loaded', [ $this, 'init_admin' ] );
    }

    public function init_admin() {
        if ( is_admin() ) {
            require_once( 'admin/admin.php' );
            // 实例化Admin类,因为adminMenu是实例方法
            $admin_instance = new Mango\Admin();
            add_action('admin_menu', [ $admin_instance, 'adminMenu' ] );
        }
    }

    public function activate(){
        // 仅存放插件激活时需执行的操作,如创建数据库表、设置默认选项等
    }

    function deactivate(){
        // 停用逻辑
    }

    function uninstall(){
        // 卸载逻辑
    }

    function CPT_rzeczoznawcy(){
       
    }
}

if( class_exists( 'PluginRzeczoznawcy' )){
    $rzeczoznawcyPlugin = new PluginRzeczoznawcy();
}

// 激活钩子
register_activation_hook(__FILE__, array($rzeczoznawcyPlugin,'activate'));
// 停用钩子
register_deactivation_hook(__FILE__, array($rzeczoznawcyPlugin,'deactivate'));

2. 修复Admin类的方法调用问题

原代码中用['Mango\Admin', 'adminMenu']是把adminMenu当作静态方法调用,但方法内使用$this调用settingsPage会触发致命错误。必须实例化Admin类后,用实例对象注册动作,如上述代码所示。

3. 开启错误调试(可选)

若后续仍有问题,可在wp-config.php中开启WordPress调试模式,方便定位问题:

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

错误信息会输出到屏幕或wp-content/debug.log文件中。

验证修复

  1. 先停用插件,再重新激活
  2. 进入WordPress后台,即可看到名为MenuTest的菜单,点击后会显示Test内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:10:26