我有一个父类,其中包含以下内容:
use app\\My_Dashboard;
class My_Class {
public function __construct() {
add_action(\'admin_menu\', array($this, \'setup_dashboard_page\'));
}
public function setup_dashboard_page() {
My_Dashboard::add_dashboard_page();
}
}
以及具有管理页面功能的类:
class My_Dashboard {
public static function add_dashboard_page() {
add_menu_page(\'My Settings\', \'My Settings\', \'my-settings\', array($this, \'dashboard_page_cb\'));
}
public function dashboard_page_cb() {
//The markup
}
}
这种方法不起作用,我看不到添加的管理菜单项和页面。我尝试的第二种方法是:
use app\\My_Dashboard;
class My_Class {
public function __construct() {
add_action(\'admin_menu\', array($this, \'setup_dashboard_page\'));
}
public function setup_dashboard_page() {
//Not very sure of the syntax, bad at OOP
add_menu_page(\'My Settings\', \'My Settings\', \'my-settings\', \'My_Dashboard::dashboard_page_cb\');
}
}
我如何让它工作?我的想法是将所有与仪表板相关的内容与其他类分离。
Update:第一种方法有效,并添加了菜单项。但是输出页面标记的回调函数似乎不起作用。我检查了拼写错误,但似乎一切正常。
最合适的回答,由SO网友:Mark Kaplun 整理而成
我讨厌在wordpress的功能结构中混入OOP(下面是反对票……)。如果使用OOP只是为了名称间隔,那么只需使用PHP的名称间隔特性,将函数放入类只是OOP应该是的一小部分。
无论如何,您的问题是,只有两种方法可以引用类方法,一种是当它与specific 对象,或者如果它在类中是静态的(基本上与类关联,但与对象无关)。在代码中,您试图将对象绑定函数视为静态函数(我确信,如果您检查错误日志,您将看到一些相关错误)。有两种可能的修复方法1。将相关函数设为静态,并使用第二个变量2中的语法2。使用单例模式,实例化dashboard类的对象,将其作为全局对象,并在第一个变体中使用它而不是类名。而不是
public function setup_dashboard_page() {
My_Dashboard::add_dashboard_page();
}
执行
global $dashboard;
$dashboard = new my_dashboard()
.....
public function setup_dashboard_page() {
global $dashboard;
$dashboard->add_dashboard_page();
}
并且始终使用完整的错误报告调试代码,并修复所有错误和通知;)
SO网友:Amjad Ali
工作示例
class PluginSkeleton {
public function __construct(){
add_action(\'admin_menu\',array($this,\'pluginskeleton_menu\'));
}
public function pluginskeleton_menu(){
add_menu_page( \'Application Users\', \'Application Users\', \'manage_options\', \'application-users.php\',array($this,\'application_users_page\'));
}
public function application_users_page(){
echo \'i am here\';
}
}
将$this与回调函数一起使用
add_menu_page( \'Application Users\', \'...\', ...\', \'...\',array($this,\'application_users_page\'));
SO网友:Amigo Dheena
您可以像这样简单地添加菜单页,我希望这是一种简单的方法
class MyPlugin{
function __construct()
{
add_action(\'admin_menu\', array($this, \'add_menu_page_fun\'));
}
// Add Menu Page
function add_menu_page_fun() {
add_menu_page(
__(\'My Plugin Page\',\'myplugin-menupage\'), //Page title
__(\'My Plugin Title\',\'myplugin-menu\'), //Menu title
\'manage_options\', //capability
\'my-plug-handle\', //menu_slug
array($this, \'toplevel_page\'), //function
\'dashicons-buddicons-activity\' //icon url
);
}
// Displays the page content for the custom Toplevel menu
function toplevel_page() {
// echo "<h2>" . __( \'Welcome to admin page\', \'myplugin-menu\' ) . "</h2>";
include \'My-admin.php\'; //new php file
}
}