add_menu_page()
最后更新于:2021-11-25 19:20:01
add_menu_page( string$page_title, string$menu_title, string$capability, string$menu_slug, callable$function=”, string$icon_url=”, int$position=null)Add a top-level menu page.
参数
- $page_title
-
(string) (Required) The text to be displayed in the title tags of the page when the menu is selected.
- $menu_title
-
(string) (Required) The text to be used for the menu.
- $capability
-
(string) (Required) The capability required for this menu to be displayed to the user.
- $menu_slug
-
(string) (Required) The slug name to refer to this menu by. Should be unique for this menu page and only include lowercase alphanumeric, dashes, and underscores characters to be compatible with sanitize_key().
- $function
-
(callable) (Optional) The function to be called to output the content for this page.
Default value: ”
- $icon_url
-
(string) (Optional) The URL to the icon to be used for this menu.
- Pass a base64-encoded SVG using a data URI, which will be colored to match the color scheme. This should begin with ‘data:image/svg+xml;base64,’.
- Pass the name of a Dashicons helper class to use a font icon, e.g. ‘dashicons-chart-pie’.
- Pass ‘none’ to leave div.gc-menu-image empty so an icon can be added via CSS.
Default value: ”
- $position
-
(int) (Optional) The position in the menu order this item should appear.
Default value: null
响应
(string) The resulting page’s hook_suffix.
源文件
文件: gc-admin/includes/plugin.php
function add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function = '', $icon_url = '', $position = null ) {
global $menu, $admin_page_hooks, $_registered_pages, $_parent_pages;
$menu_slug = plugin_basename( $menu_slug );
$admin_page_hooks[ $menu_slug ] = sanitize_title( $menu_title );
$hookname = get_plugin_page_hookname( $menu_slug, '' );
if ( ! empty( $function ) && ! empty( $hookname ) && current_user_can( $capability ) ) {
add_action( $hookname, $function );
}
if ( empty( $icon_url ) ) {
$icon_url = 'dashicons-admin-generic';
$icon_class = 'menu-icon-generic ';
} else {
$icon_url = set_url_scheme( $icon_url );
$icon_class = '';
}
$new_menu = array( $menu_title, $capability, $menu_slug, $page_title, 'menu-top ' . $icon_class . $hookname, $hookname, $icon_url );
if ( null === $position ) {
$menu[] = $new_menu;
} elseif ( isset( $menu[ "$position" ] ) ) {
$position = $position + substr( base_convert( md5( $menu_slug . $menu_title ), 16, 10 ), -5 ) * 0.00001;
$menu[ "$position" ] = $new_menu;
} else {
$menu[ $position ] = $new_menu;
}
$_registered_pages[ $hookname ] = true;
// No parent as top level.
$_parent_pages[ $menu_slug ] = false;
return $hookname;
}
/** * Register a custom menu page. */ function gcdocs_register_my_custom_menu_page() { add_menu_page( __( 'Custom Menu Title', 'textdomain' ), 'custom menu', 'manage_options', 'myplugin/myplugin-admin.php', '', plugins_url( 'myplugin/images/icon.png' ), 6 ); } add_action( 'admin_menu', 'gcdocs_register_my_custom_menu_page' );
/** * Register a custom menu page. */ function gcdocs_register_my_custom_menu_page(){ add_menu_page( __( 'Custom Menu Title', 'textdomain' ), 'custom menu', 'manage_options', 'custompage', 'my_custom_menu_page', plugins_url( 'myplugin/images/icon.png' ), 6 ); } add_action( 'admin_menu', 'gcdocs_register_my_custom_menu_page' ); /** * Display a custom menu page */ function my_custom_menu_page(){ esc_html_e( 'Admin Page Test', 'textdomain' ); }
/** * Create admin Page to list unsubscribed emails. */ // Hook for adding admin menus add_action('admin_menu', 'gcdocs_unsub_add_pages'); // action function for above hook /** * Adds a new top-level page to the administration menu. */ function gcdocs_unsub_add_pages() { add_menu_page( __( 'Unsub List', 'textdomain' ), __( 'Unsub Emails','textdomain' ), 'manage_options', 'gcdocs-unsub-email-list', 'gcdocs_unsub_page_callback', '' ); } /** * Disply callback for the Unsub page. */ function gcdocs_unsub_page_callback() { echo 'Unsubscribe Email List'; }
class GCDocs_EB_EbtechModules { public static function init() { add_action( 'admin_enqueue_scripts', array( __CLASS__, 'adminAssets' ) ); add_action( 'admin_menu', array( __CLASS__, 'adminMenu' ) ); } public static function adminMenu() { add_menu_page( __( 'GCDocs Ebtech Menu', 'gcdocs-webnail-modules' ), __( 'GCDocs Ebtech modules', 'gcdocs-webnail-modules' ), 'manage_options', 'gcdocs-ebtech-modules', array( __CLASS__, 'menuPage' ), 'dashicons-tagcloud', 6 ); } public static function menuPage() { if ( is_file( plugin_dir_path( __FILE__ ) . 'includes/layout.php' ) ) { include_once plugin_dir_path( __FILE__ ) . 'includes/layout.php'; } } public static function getSettings() { return get_option( 'gcdocs_ebtech_modules_option' ); } public static function adminAssets() { if ( isset( $_GET['page'] ) && ! empty( $_GET['page'] ) && 'gcdocs-ebtech-modules' === $_GET['page'] ) { } } } GCDocs_EB_EbtechModules::init(); GCDocs_EB_EbtechModules::getSettings();
// For those who are object orientated. Add a class // function as the menu callback and setup the // menus automatically. // Exit if accessed directly if ( !defined( 'ABSPATH' ) ) exit; class MyMenuSetterUpper { private static $instance; /** * Main Instance * * @staticvar array $instance * @return The one true instance */ public static function instance() { if ( ! isset( self::$instance ) ) { self::$instance = new self; self::$instance->addMyAdminMenu(); } return self::$instance; } public function addMyAdminMenu() { add_menu_page( 'My Page Title', 'My Page', 'read', 'my-menu-page-slug', array( $this, 'myAdminPage' ), 'to/icon/file.svg', '2.1' ); } public function myAdminPage() { // Echo the html here... } } // Call the class and add the menus automatically. $MyMenuSetterUpper = MyMenuSetterUpper::instance();