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();