1

请注意,创建此问题是为了避免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但我不确定它是否也适用于我的情况,我真的不明白我应该做什么。

4

1 回答 1

1

如果您想将参数传递给您的函数,请尝试这个

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

第一行你创建了一个你告诉钩子到 WordPress 函数的动作。第二行表示带有参数的操作。

做动作()

编辑

因为将参数添加到默认的 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;
}

这未经测试,但它应该给你一个想法

于 2013-08-18T07:22:13.543 回答