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

WordPress插件OOP开发调用add_menu_page报未定义函数错误如何解决?

问题原因
  • 调用顺序错误:你在实例化类之后直接调用了addingpage()方法,这时候WordPress还没有加载完后台管理相关的核心函数,add_menu_page()还未定义,所以触发致命错误。你本来应该是把addingpage挂载到admin_menu钩子上由WordPress在合适的时机触发,而不是自己手动调用这个方法。
  • 链式调用逻辑错误:你写的$x->addingpage()->hooking()是先执行添加菜单的逻辑,再注册钩子,完全反过来了,钩子注册还没生效就先跑了菜单添加逻辑,肯定会报错。
修复后的代码
class abc_adding_page{
    public function addingpage(){
        add_menu_page('abcba_products' ,'abcba_products' ,'manage_options' ,'abcba_products', function(){} ,'dashicons-store' ,110);
    }
    public function hooking(){
        add_action('admin_menu' ,  array($this ,'addingpage'));
    }
}

$x = new abc_adding_page();
$x->hooking(); // 只需要注册钩子即可,不需要手动调用addingpage方法

可选优化写法

可以把钩子注册逻辑放到构造方法里,实例化时自动完成注册,使用更简洁:

class abc_adding_page{
    // 构造方法,实例化时自动注册钩子
    public function __construct(){
        add_action('admin_menu' ,  array($this ,'addingpage'));
    }
    public function addingpage(){
        add_menu_page('abcba_products' ,'abcba_products' ,'manage_options' ,'abcba_products', function(){} ,'dashicons-store' ,110);
    }
}

new abc_adding_page(); // 直接实例化即可完成注册
注意事项
  • 所有WordPress核心函数的调用都必须挂载到对应的官方钩子上执行,不要在全局作用域或者类实例化的同步流程里直接调用,避免核心函数未加载的报错。
  • admin_menu钩子是WordPress专门用来加载后台菜单相关逻辑的触发点,只有到这个钩子执行的阶段,add_menu_page这类后台菜单函数才会被定义完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:24:05