Php 基于WP插件样板文件的插件返回错误“;警告:call“user”func“u array()要求参数1为有效回调;
我正在基于Wordpress插件样板(面向对象编程)构建一个Wordpress插件,当调用在自定义管理仪表板菜单中显示插件管理页面的函数时,我遇到了一个困难 在我的课堂上,我调用了我的自定义菜单方法,当菜单显示得很好时,它就工作了Php 基于WP插件样板文件的插件返回错误“;警告:call“user”func“u array()要求参数1为有效回调;,php,wordpress,wordpress-theming,Php,Wordpress,Wordpress Theming,我正在基于Wordpress插件样板(面向对象编程)构建一个Wordpress插件,当调用在自定义管理仪表板菜单中显示插件管理页面的函数时,我遇到了一个困难 在我的课堂上,我调用了我的自定义菜单方法,当菜单显示得很好时,它就工作了 private function define_admin_hooks() { $plugin_admin = new myPlugin_Admin( $this->get_plugin_name(), $this->get_version()
private function define_admin_hooks() {
$plugin_admin = new myPlugin_Admin( $this->get_plugin_name(), $this->get_version() );
$this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' );
$this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts' );
// Load CPTs
$this->loader->add_action( 'admin_init', $plugin_admin, 'create_cpt_person' );
$this->loader->add_action( 'admin_menu', $plugin_admin, 'setup_admin_menus' );
$this->loader->add_action( 'parent_file', $plugin_admin, 'set_current_menu' );
}
然后它执行我的setup\u admin\u menus方法
public static function setup_admin_menus() {
$page_title = 'myPlugin';
$menu_title = 'myPlugin';
$capability = 'manage_options';
$menu_slug = 'myplugin_admin';
$function = 'display_admin_page'; // This is what triggers the showing of my admin page once I click on the parent menu (as if you were clicking on "Pages" in your admin dashboard)
$icon_url = 'dashicons-admin-page';
$position = 3;
add_menu_page(
$page_title,
$menu_title,
$capability,
$menu_slug,
$function,
$icon_url,
$position
);
$submenu_pages = array(
// Post Type :: Person
array(
'parent_slug' => 'myplugin_admin',
'page_title' => 'People',
'menu_title' => 'People',
'capability' => 'read',
'menu_slug' => 'edit.php?post_type=person',
'function' => null
)
);
// Add each submenu item to custom admin menu.
foreach($submenu_pages as $submenu){
add_submenu_page(
$submenu['parent_slug'],
$submenu['page_title'],
$submenu['menu_title'],
$submenu['capability'],
$submenu['menu_slug'],
$submenu['function']
);
}
}
这就是所谓的函数:
public static function display_admin_page() {
echo '<div class="wrap">';
echo '<h2>Welcome To WordPets</h2>';
echo '<p>This is the custom admin page created from the custom admin menu.</p>';
echo '</div><!-- end .wrap -->';
echo '<div class="clear"></div>';
}
公共静态功能显示\管理\页面(){
回声';
echo“欢迎使用WordPets”;
echo'这是从自定义管理菜单创建的自定义管理页面。;
回声';
回声';
}
但每当我进入插件的管理页面时,我都会得到警告:call_user_func_array()希望参数1是有效的回调,在第496行的/Users/Lazhar/dev/wp includes/plugin.php中未找到函数“display_admin_page”或函数名无效,并且它只显示错误消息
任何帮助都将不胜感激:)尝试将您的
display\u admin\u page()
方法置于课堂之外
function display_admin_page() {
echo '<div class="wrap">';
echo '<h2>Welcome To WordPets</h2>';
echo '<p>This is the custom admin page created from the custom admin menu.</p>';
echo '</div><!-- end .wrap -->';
echo '<div class="clear"></div>';
}
功能显示\管理\页面(){
回声';
echo“欢迎使用WordPets”;
echo'这是从自定义管理菜单创建的自定义管理页面。;
回声';
回声';
}
另一种方法(而不是将函数放在类之外)是将类方法作为数组传递:
$page_title = 'myPlugin';
$menu_title = 'myPlugin';
$capability = 'manage_options';
$menu_slug = 'myplugin_admin';
$function = array($this, 'display_admin_page'); //This will properly get the class method function name
这是引用函数(类方法)的正确方法。Perfect-它确实在类之外工作。不知道为什么?因为您的
$函数
变量只有显示管理页面
。您还可以尝试$function=array('your_class\u name'、'display\u admin\u page')
使其在类中工作。我从未嵌套过它,但我认为它应该可以工作。