当前浏览:首页 / WordPress钩子 / admin_menu

do_action( 'admin_menu', string $context )

在后台管理中加载管理菜单之前触发

adminmore...

menumore...


参数

$contextstring
空上下文。

更多信息

  • 此操作用于向管理面板的菜单结构添加额外的子菜单和菜单选项。它在基本管理面板菜单结构就绪后运行。
  • 这个动作不能放在admin_init动作函数中,因为admin_init动作是在admin_menu之后调用的。

源码

查看源码 官方文档


更新日志

版本描述
1.5.0开始引入

使用示例

  • 示例1

    如果您想更改菜单label,可以使用此钩子并更改global $menu, $submenu values

    add_action( 'admin_menu', 'change_media_label' );
    function change_media_label(){
      global $menu, $submenu;
      debug_msg($menu);
      $menu[10][0] = 'Photos/Videos';
      $submenu['upload.php'][5][0] = 'All Photos/Videos';
      $submenu['upload.php'][10][0] = 'Upload new';
    }
  • 示例2

    此代码段添加管理菜单和子菜单HTML内容

    //call the 'add_menu_page' function with 'admin_menu' action hook
    	add_action( 'admin_menu', array( $this, 'wpdocs_add_menu_page' ), 99 );
    
        /**
         * Add page to admin menu
         */
        public function wpdocs_add_menu_page() {
            add_menu_page(
                esc_html__( 'WooCommerce B2B Sales Agents', 'woocommerce-b2b-sales-agents' ),
                esc_html__( 'WooCommerce B2B Sales Agents', 'woocommerce-b2b-sales-agents'),
                'manage_woocommerce',
                'wcb2bsa-commissions',
                null,
                'dashicons-businessman',
                55.5
            );
            add_submenu_page(
                'wcb2bsa-commissions',
                esc_html__( 'Commissions', 'woocommerce-b2b-sales-agents' ),
                esc_html__( 'Commissions', 'woocommerce-b2b-sales-agents' ),
                'manage_woocommerce',
                'wcb2bsa-commissions',
                array( $this, 'wpdocs_add_menu_page_callback' )
            );
        }
    
        /**
         * Add page to admin menu callback
         */
        public function wpdocs_add_menu_page_callback() {
            include WCB2BSA_ABSPATH . 'includes/views/html-admin--page-commissions.php';
        }
  • 示例3

    假设你正在构建一个插件,你需要为插件页面注册一个概览或仪表板菜单选项,你可以这样做:

    // Define constants
    define( 'PLUGIN_SLUG', 'your-plugin' );
    define( 'PLUGIN_ROLE', 'manage_options' );
    define( 'PLUGIN_DOMAIN', 'your-plugin-text-domain' );
    
    add_action( 'admin_menu', 'register_your_plugin_menu', 9 );
    
    function register_your_plugin_menu() {
    	add_menu_page(
    		__( 'Your Plugin', PLUGIN_DOMAIN ),
    		'Your Plugin',
    		PLUGIN_ROLE,
    		PLUGIN_SLUG,
    		false,
    		'dashicons-admin-generic',
    		''
    	);
    
    	add_submenu_page(
    		PLUGIN_SLUG,
    		'Your Plugin',
    		'Dashboard',
    		PLUGIN_ROLE,
    		PLUGIN_SLUG,
    		'your_plugin_dashboard_callback',
    	);
    }
  • 示例4

    你可能会遇到这样的情况:在admin_menu钩子中删除类似admin.php?page=jetpack这样的slug,没有效果。要解决此问题,请使用remove_menu_page()函数定义要删除的正确slug。

    尝试以下代码:

    function wpdocs_list_menus() {
        global $menu;
        var_dump( $menu );
    }
    add_action( 'admin_menu', 'wpdocs_list_menus', 99999 );
  • 示例5

    从Codex迁移的示例:

    示例来自wpautop控件插件,其中的代码用于将选项页添加到“设置”菜单。

    add_action('admin_menu', 'wpautop_control_menu');
    
    function wpautop_control_menu() {
      add_submenu_page('options-general.php', 'wpautop-control', 'wpautop control', 'manage_options', 'wpautop-control-menu', 'wpautop_control_options');
    }