问题#1-上述代码将输出23123两次,访问插件页面时和未访问插件页面时。如何使其仅在页面为当前屏幕时打印页面内容?基本上:http://localhost/wp-admin/admin.php?page=camden-vmtool
初始化类时,您正在挂接pageInit()
方法转换为在所有管理页面上激发的挂钩。然后在add_menu_page()
参数。
老实说,我不明白这一点:
问题#2-如何基于当前打开的页面仅预加载一个页面类?我将有大约4个页面,一次加载类感觉很糟糕,只是为了启动类实例。
至于第一个问题,我不知道是什么PageInit()
需要这样做,但由于信息有限,因此无需事先实例化该类。其工作原理如下:
class VmSettingsPage {
private $options;
public function __construct()
{
add_action(\'admin_init\', array($this, \'pageInit\'));
}
public function pageInit() {
echo 23123;
}
}
// $settingsPage = new VmSettingsPage();
add_action(\'admin_menu\', \'cvmAdminMenu\');
function cvmAdminMenu() {
add_menu_page(\'VM Tool\', \'VM Tool\',
\'manage_options\', \'camden-vmtool\', array(\'VmSettingsPage\',\'pageInit\'));
}
该类将自动实例化。如果确实需要实例化该类,则回调应该不同:
class VmSettingsPage {
private $options;
public function __construct()
{
// add_action(\'admin_init\', array($this, \'pageInit\'));
}
public function pageInit() {
echo 23123;
}
}
global $settingsPage;
$settingsPage = new VmSettingsPage();
add_action(\'admin_menu\', \'cvmAdminMenu\');
function cvmAdminMenu() {
global $settingsPage;
add_menu_page(\'VM Tool\', \'VM Tool\',
\'manage_options\', \'camden-vmtool\', array($settingsPage,\'pageInit\'));
}
如果你这样做,那么你就不能使用
admin_init
但没有明显的理由使用它
admin_init
不管怎么说,都是钩子。
我进一步建议您将所有内容封装到类中:
class VmSettingsPage {
private $options;
public function __construct()
{
// add_action(\'admin_init\', array($this, \'pageInit\'));
add_action(\'admin_menu\', array($this,\'cvmAdminMenu\'));
}
function cvmAdminMenu() {
add_menu_page(\'VM Tool\', \'VM Tool\',
\'manage_options\', \'camden-vmtool\', array($this,\'pageInit\'));
}
public function pageInit() {
echo 23123;
}
}
$settingsPage = new VmSettingsPage();