WordPress功能函數(shù)add_dashboard_page()
wordpress功能函數(shù)add_dashboard_page(),添加子菜單頁(yè)到儀表板主菜單。
用法:
add_dashboard_page( string $page_title, string $menu_title, string $capability, string $menu_slug, callable $function = '', int $position = null )
描述:
該函數(shù)具有一種功能,用于確定菜單中是否包含某個(gè)頁(yè)面。
用于處理頁(yè)面輸出的函數(shù)也必須檢查用戶是否具備所需的功能。
參數(shù):
$page_title
(string) (必需) 選中菜單時(shí)要在頁(yè)面標(biāo)題標(biāo)簽中顯示的文本。
$menu_title
(string) (必需) 要用于菜單的文本。
$capability
(string) (必需) 向用戶顯示該菜單所需的功能。
$menu_slug
(string) (必需) 用來(lái)引用這個(gè)菜單的蛞蝓名稱(對(duì)于這個(gè)菜單應(yīng)該是唯一的)。
$function
(callable) (可選) 用于輸出此頁(yè)面內(nèi)容的函數(shù)。
默認(rèn)值:“
$position
(int)(可選)該選項(xiàng)在菜單中應(yīng)該出現(xiàn)的位置。
默認(rèn)值:空
返回:
(string|false)結(jié)果頁(yè)面的hook_suffix,如果用戶不具備所需的能力則為false。
來(lái)源:
文件: wp-admin/includes/plugin.php
function add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function = '', $position = null ) {
global $submenu, $menu, $_wp_real_parent_file, $_wp_submenu_nopriv,
$_registered_pages, $_parent_pages;
$menu_slug = plugin_basename( $menu_slug );
$parent_slug = plugin_basename( $parent_slug );
if ( isset( $_wp_real_parent_file[ $parent_slug ] ) ) {
$parent_slug = $_wp_real_parent_file[ $parent_slug ];
}
if ( ! current_user_can( $capability ) ) {
$_wp_submenu_nopriv[ $parent_slug ][ $menu_slug ] = true;
return false;
}
/*
* If the parent doesn't already have a submenu, add a link to the parent
* as the first item in the submenu. If the submenu file is the same as the
* parent file someone is trying to link back to the parent manually. In
* this case, don't automatically add a link back to avoid duplication.
*/
if ( ! isset( $submenu[ $parent_slug ] ) && $menu_slug !== $parent_slug ) {
foreach ( (array) $menu as $parent_menu ) {
if ( $parent_menu[2] === $parent_slug && current_user_can( $parent_menu[1] ) ) {
$submenu[ $parent_slug ][] = array_slice( $parent_menu, 0, 4 );
}
}
}
$new_sub_menu = array( $menu_title, $capability, $menu_slug, $page_title );
if ( ! is_int( $position ) ) {
if ( null !== $position ) {
_doing_it_wrong(
__FUNCTION__,
sprintf(
/* translators: %s: add_submenu_page() */
__( 'The seventh parameter passed to %s should be an integer representing menu position.' ),
'add_submenu_page()
'
),
'5.3.0'
);
}
$submenu[ $parent_slug ][] = $new_sub_menu;
} else {
// Append the submenu if the parent item is not present in the submenu,
// or if position is equal or higher than the number of items in the array.
if ( ! isset( $submenu[ $parent_slug ] ) || $position >= count( $submenu[ $parent_slug ] ) ) {
$submenu[ $parent_slug ][] = $new_sub_menu;
} else {
// Test for a negative position.
$position = max( $position, 0 );
if ( 0 === $position ) {
// For negative or `0` positions, prepend the submenu.
array_unshift( $submenu[ $parent_slug ], $new_sub_menu );
} else {
// Grab all of the items before the insertion point.
$before_items = array_slice( $submenu[ $parent_slug ], 0, $position, true );
// Grab all of the items after the insertion point.
$after_items = array_slice( $submenu[ $parent_slug ], $position, null, true );
// Add the new item.
$before_items[] = $new_sub_menu;
// Merge the items.
$submenu[ $parent_slug ] = array_merge( $before_items, $after_items );
}
}
}
// Sort the parent array.
ksort( $submenu[ $parent_slug ] );
$hookname = get_plugin_page_hookname( $menu_slug, $parent_slug );
if ( ! empty( $function ) && ! empty( $hookname ) ) {
add_action( $hookname, $function );
}
$_registered_pages[ $hookname ] = true;
/*
* Backward-compatibility for plugins using add_management_page().
* See wp-admin/admin.php for redirect from edit.php to tools.php.
*/
if ( 'tools.php' === $parent_slug ) {
$_registered_pages[ get_plugin_page_hookname( $menu_slug, 'edit.php' ) ] = true;
}
// No parent as top level.
$_parent_pages[ $menu_slug ] = $parent_slug;
return $hookname;
}
更新日志:

用戶貢獻(xiàn)的筆記:
(由jakeparis貢獻(xiàn)- 5年前)
- 儀表板: ‘index.php’
- 帖子: ‘edit.php’
- 媒體: ‘upload.php’
- 頁(yè)面: ‘edit.php?post_type=page’
- 評(píng)論: ‘edit-comments.php’
- 自定義Post類型: ‘edit.php?post_type=your_post_type’
- 外觀: ‘themes.php’
- 插件: ‘plugins.php’
- 用戶: ‘users.php’
- 工具: ‘tools.php’
- 設(shè)置: ‘options-general.php’
- 網(wǎng)絡(luò)設(shè)置: ‘settings.php’
(由Codex - 6年前貢獻(xiàn))
用add_menu_page()創(chuàng)建的內(nèi)部菜單
如果您試圖將子菜單頁(yè)添加到通過add_menu_page()創(chuàng)建的菜單頁(yè),那么第一個(gè)子菜單頁(yè)將是父add_menu_page()的副本。
如果在這個(gè)場(chǎng)景中你想要一個(gè)子菜單頁(yè)面,你應(yīng)該首先創(chuàng)建一個(gè)add_menu_page()的副本,然后添加你的add_submenu_page():
add_menu_page('My Custom Page', 'My Custom Page', 'manage_options', 'my-top-level-slug');
add_submenu_page( 'my-top-level-slug', 'My Custom Page', 'My Custom Page',
'manage_options', 'my-top-level-slug');
add_submenu_page( 'my-top-level-slug', 'My Custom Submenu Page', 'My Custom Submenu Page',
'manage_options', 'my-secondary-slug');
(克里斯蒂娜·布拉斯特5年前提供)
將子菜單頁(yè)添加到自定義文章類型
如果你想添加一個(gè)子菜單類型到一個(gè)自定義的文章類型,比如一個(gè)插件創(chuàng)建的自定義文章類型的參考頁(yè)面,你可以使用$parent_slug參數(shù),你可以在“所有的文章”視圖的頂部看到這個(gè)文章類型。例如,對(duì)于自定義post類型“Book”,$parent_slug可以是'edit.php?post_type= Book '。
例子:
/**
* Adds a submenu page under a custom post type parent.
*/
function books_register_ref_page() {
add_submenu_page(
'edit.php?post_type=book',
__( 'Books Shortcode Reference', 'textdomain' ),
__( 'Shortcode Reference', 'textdomain' ),
'manage_options',
'books-shortcode-ref',
'books_ref_page_callback'
);
}
/**
* Display callback for the submenu page.
*/
function books_ref_page_callback() {
?>
}
(穆斯塔法·蘇非4年前貢獻(xiàn))
php類的子菜單示例
/**
* Sub menu class
*
* @author Mostafa
*/
class Sub_menu {
/**
* Autoload method
* @return void
*/
public function __construct() {
add_action( 'admin_menu', array(&$this, 'register_sub_menu') );
}
/**
* Register submenu
* @return void
*/
public function register_sub_menu() {
add_submenu_page(
'options-general.php', 'Submenu title', 'Submenu title', 'manage_options', 'submenu-page', array(&$this, 'submenu_page_callback')
);
}
/**
* Render submenu
* @return void
*/
public function submenu_page_callback() {
echo '
echo '
Submenu title
';echo '
}
}
new Sub_menu();
(由Codex - 6年前貢獻(xiàn))
例子
add_action('admin_menu', 'wpdocs_register_my_custom_submenu_page');
function wpdocs_register_my_custom_submenu_page() {
add_submenu_page(
'tools.php',
'My Custom Submenu Page',
'My Custom Submenu Page',
'manage_options',
'my-custom-submenu-page',
'wpdocs_my_custom_submenu_page_callback' );
}
function wpdocs_my_custom_submenu_page_callback() {
echo '
echo '
My Custom Submenu Page
';echo '
}
要從它所屬的頂級(jí)菜單項(xiàng)隱藏子菜單鏈接,你可以這樣做
add_action('admin_menu', 'wpdocs_register_my_custom_submenu_page');
function wpdocs_register_my_custom_submenu_page() {
add_submenu_page(
null, //or 'options.php'
'My Custom Submenu Page',
'My Custom Submenu Page',
'manage_options',
'my-custom-submenu-page',
'my_custom_submenu_page_callback',
);
}
(由LogixTree在4年前貢獻(xiàn))
在處理這些類時(shí),您可以通過遵循確??烧{(diào)用對(duì)象是靜態(tài)函數(shù)來(lái)添加_submenu_page。
add_submenu_page( 'admin_menu', 'Custom Menu', 'My Custom Menu', 'manage_options', 'my-custom-menu', __CLASS__ .'::menu_page_output' );
public menu_page_output() {
//Menu Page output code
}
(由ILOVEWP貢獻(xiàn)- 4年前)
對(duì)于其他故障排除此函數(shù)意外問題的人,請(qǐng)注意最后一個(gè)參數(shù),特別是$函數(shù),它必須是一個(gè)字符串,函數(shù)名,而不是對(duì)函數(shù)本身的調(diào)用。業(yè)余的錯(cuò)誤,我知道,但有時(shí)你只是犯了最簡(jiǎn)單的錯(cuò)誤。
缺點(diǎn):
add_menu_page('My Custom Page', 'My Custom Page', 'manage_options', 'my-top-level-slug', my-output-function());
優(yōu)勢(shì):
add_menu_page('My Custom Page', 'My Custom Page', 'manage_options', 'my-top-level-slug', 'my-output-function');
(由tripflex提供- 3年前)
為了進(jìn)一步說明添加一個(gè)頁(yè)面而不顯示在菜單/子菜單中,使用以下代碼:
add_action('admin_menu', 'wpdocs_register_my_custom_submenu_page');
function wpdocs_register_my_custom_submenu_page() {
add_submenu_page(
'options.php',
'My Custom Submenu Page',
'My Custom Submenu Page',
'manage_options',
'my-custom-submenu-page',
'my_custom_submenu_page_callback',
);
}
然后您將通過以下URL訪問此頁(yè)面:/wp-admin/options.php?page=my-custom-submenu-page
(由isMike()貢獻(xiàn)- 11個(gè)月前)
如果在類中工作,add_submenu_page的“function”參數(shù)應(yīng)該是一個(gè)數(shù)組,數(shù)組中的第一個(gè)值是類的實(shí)例,而數(shù)組中的第二個(gè)值是對(duì)象中的一個(gè)方法(以字符串的形式給出)。
在下面的例子
Class WPDocs_AdminPage
{
private $_plugin_name;
private $_version;
public function __construct( $plugin_name, $version )
{
$this->_plugin_name = $plugin_name;
$this->_version = $version;
}
public function wpdocs_create_menu_and_submenu_page()
{
add_menu_page(
'PAGE TITLE', 'MENU TITLE', 'CAPABILITY', 'menu_slug',
array( $this, 'wpdocs_method_name_in_the_class' ), 'icon_url', 'POSITION'
);
add_submenu_page(
'parent_slug', 'PAGE TITLE', 'MENU TITLE', 'CAPABILITY', 'menu_slug',
array( $this, 'wpdocs_method_name_in_the_class' )
);
}
}
$admin_page = new WPDocs_AdminPage;
add_action( 'admin_menu', array( $admin_page, 'wpdocs_create_menu_and_submenu_page' ) );
(由isabel104貢獻(xiàn)- 4個(gè)月前)
關(guān)于上面“更多信息”部分的第一個(gè)提示,你也可能會(huì)遇到“對(duì)不起,您不允許訪問此頁(yè)面?!毕ⅲ词鼓颜_地鉤入admin_menu鉤子。如果所有這些都為真,則會(huì)出現(xiàn)此錯(cuò)誤信息:
- 父頁(yè)面是使用add_menu_page添加的自定義頁(yè)面
- 父頁(yè)面是在另一個(gè)插件中創(chuàng)建的,而不是創(chuàng)建子菜單頁(yè)面的同一個(gè)插件
- 您沒有為add_submenu_page調(diào)用向admin_menu鉤子添加較低的優(yōu)先級(jí),因此子菜單頁(yè)可能在父頁(yè)面之前被觸發(fā),從而導(dǎo)致錯(cuò)誤。
解決方案:向創(chuàng)建子菜單頁(yè)面的操作添加較低的優(yōu)先級(jí),如99。例如:
add_action( 'admin_menu', 'wpdocs_register_my_custom_submenu_page', 99 );
(rtpHarry于6個(gè)月前貢獻(xiàn))
如果你想把你的自定義子頁(yè)面的url如下:
https://www.example.com/wp-admin/admin.php?page=custom-settings
那你應(yīng)該使用父彈頭的自定義設(shè)置。
在我的用例中,我想把一個(gè)自定義分類法放在一個(gè)ACF選項(xiàng)頁(yè)面下,我使用了這個(gè):
add_submenu_page(
'custom-settings',
'Product Filter By Ambient Noise',
'Product Filter By Ambient Noise',
'manage_options',
'edit-tags.php?taxonomy=product-filter-ambient-noise'
);
(由獵魔人貢獻(xiàn)- 6年前)
人們喜歡“工具”。php '可以在舊文檔https://codex.wordpress.org/Function_Reference/add_submenu_page#Parameters中找到