使用do_action时“调用未定义的函数wp_get_current_user()”错误

时间:2013-08-17 23:47:59

标签: php wordpress-plugin wordpress

请注意,此问题是为避免global $plugin_name;

而创建的

我正在写一个WordPress(WP 3.6)插件,我正在

wp_get_current_user() in /var/www/wordpress/wp-includes/capabilities.php on line 1281, referer: http://10.1.1.6/wp-admin/admin.php?page=mhomepage/mhomepage_admin_menu.php如果我使用此代码

$plugin_name='mhomepage';

// Hook for adding admin menus
add_action('admin_menu', 'add_plugin_admin_page', 10, 1);
do_action('admin_menu', $plugin_name.'/mhomepage_admin_menu.php');

// add_action('admin_menu', 'add_plugin_admin_page');

function add_plugin_admin_page($plugin_name) {
    // global $plugin_name;

    //must check that the user has the required capability 
    if (!current_user_can('manage_options'))
    {
      wp_die( __('You do not have sufficient permissions to access this page.') );
    }

    add_menu_page( 'mHomePage', 'mHomePage', 'manage_options', 'mhomepage/mhomepage_admin_menu.php', '', '', 6 );
    // add_menu_page( 'mHomePage', 'mHomePage', 'manage_options', $plugin_name, '', '', 6 );
}

mhomepage_admin_menu.php看起来像

<?php

    echo "Plugin menu page";

?>

但如果我使用add_action('admin_menu', 'add_plugin_admin_page'); 在上面的代码而不是

// add_action('admin_menu', 'add_plugin_admin_page', 10, 1);
// do_action('admin_menu', $plugin_name.'/mhomepage_admin_menu.php');
一切正常吗?有人可以解释什么和为什么会发生以及解决方案是什么?我想使用do_action将参数传递给add_plugin_admin_page函数。

我找到了这个答案https://stackoverflow.com/a/6127607/250422,但我不确定它是否也适用于我的情况而且我真的不明白我应该做什么。

1 个答案:

答案 0 :(得分:1)

如果要将参数传递给函数

,请尝试此操作
// Hook for adding admin menus
add_action('admin_menu', 'add_plugin_admin_page', 10, 1);
do_action('admin_menu', $plugin_name);

您创建了一个已被告知挂钩到WordPress功能的动作的第一行。与参数一起行动的第二行。

do_action()

修改

因为将参数添加到默认的WordPress操作挂钩可能会或者可能不明智。让我们尝试以不同的方式将其分开。

创建自己的钩子

add_action( 'admin_menu', 'add_plugin_admin_page', 10, 1 );
add_action( 'plugin_admin_page', 'plugin_admin_page_arguments' );

function plugin_admin_page_arguments() {
  $plugin_name = 'Hello World'; // Your argument
  do_action('plugin_admin_page', $plugin_name);
}

然后是您的管理页面功能及其参数

function add_plugin_admin_page($plugin_name) {
  echo $plugin_name;
}

这还没有经过测试,但它应该给你一个想法