WordPress MVC框架中add_menu_page回调函数不生效是什么原因?
问题根因
- 回调函数的引用格式错误
你当前定义的ideapro_scripts_page是MenuController类的内部方法,不属于全局作用域的函数。add_menu_page的第5个参数直接传入字符串ideapro_scripts_page时,WordPress会从全局作用域检索对应函数,检索不到就不会执行回调,因此页面没有任何输出。 - 方法访问权限不规范
ideapro_scripts_page没有显式声明访问修饰符,默认权限不符合调用要求时也会导致调用失败。
修复方案
修改MenuController.php中的代码,将回调改为类实例方法的标准调用格式,同时显式声明方法的public权限:
public function adminMenu() { add_menu_page( 'Header & footer scripts', 'Site scripts', 'manage_options', 'ideapro-admin-menu', [$this, 'ideapro_scripts_page'], // 替换为类实例方法回调格式 'dashicons-editor-table', 200 ); } // 显式声明为公共方法 public function ideapro_scripts_page() { ?> <div class="wrap"> <h2> Update Scripts on the header and footer </h2> </div> <?php }
WordPress回调规则说明:如果回调是类的实例方法,必须使用
[实例对象, 方法名]的数组格式;如果是类的静态方法,使用[类名::class, 静态方法名]的格式,只有全局函数可以直接传入方法名字符串作为回调。
内容的提问来源于stack exchange,提问作者Temuujin
相关产品推荐
相关产品推荐

