国产三级农村妇女在线,国产精品毛片a∨一区二区三区,国产乱子伦视频大全,国产精品色拉拉,国产欧美日韩一区二区三区,

首頁 > 技術(shù) > cms教程

WordPress開發(fā)函數(shù)add_submenu_page()

cms教程 2022-10-26 09:23:41

wordpress開發(fā)函數(shù)add_submenu_page(),添加子菜單頁面。

用法:

add_submenu_page( string $parent_slug, string $page_title, string $menu_title, string $capability, string $menu_slug, callable $function = '', int $position = null )

描述

該函數(shù)具有一種功能,用于確定菜單中是否包含某個頁面。

用于處理頁面輸出的函數(shù)也必須檢查用戶是否具備所需的功能。

參數(shù):

$parent_slug

(string) (必需) 父菜單的slug的名字(或一個標準的WordPress管理頁面的文件名)。

$page_title

(string) (必需) 選中菜單時要在頁面標題標簽中顯示的文本。

$menu_title

(string) (必需) 要用于菜單的文本。

$capability

(string) (必需) 向用戶顯示該菜單所需的功能。

$menu_slug

(string) (必需) 用來引用此菜單的slug名稱。該菜單應(yīng)該是唯一的,只包括小寫字母、數(shù)字、破折號和下劃線字符,以兼容sanitize_key()。

$function

(callable) (可選) 用于輸出此頁面內(nèi)容的函數(shù)。

默認值: ''

$position

(int) (可選) 該項目應(yīng)出現(xiàn)在菜單順序中的位置。

默認值: null

返回

(string|false)結(jié)果頁面的hook_suffix,如果用戶不具備所需的能力則為false。

來源:

文件: 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;

}

更新日志:
WordPress開發(fā)函數(shù)add_submenu_page() (https://www.wpzt.net/) WordPress開發(fā)教程 第1張
用戶貢獻的筆記

(由jakeparis貢獻- 5年前)

$parent_slug(第一個參數(shù))

儀表板:“index . php”

帖子:“edit”

媒體:“upload.php”

頁:“edit ? post_type =頁面”

評論:“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年前貢獻)

用add_menu_page()創(chuàng)建的內(nèi)部菜單

如果您試圖將子菜單頁添加到通過add_menu_page()創(chuàng)建的菜單頁,那么第一個子菜單頁將是父add_menu_page()的副本。

如果在這個場景中你想要一個子菜單頁面,你應(yīng)該首先創(chuàng)建一個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年前提供)

將子菜單頁添加到自定義文章類型

如果你想添加一個子菜單類型到一個自定義的文章類型,比如一個插件創(chuàng)建的自定義文章類型的參考頁面,你可以使用$parent_slug參數(shù),你可以在“所有的文章”視圖的頂部看到這個文章類型。例如,對于自定義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年前貢獻)

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年前貢獻)

例子

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 '

';

}

要從它所屬的頂級菜單項隱藏子菜單鏈接,你可以這樣做

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年前貢獻)

在處理這些類時,您可以通過遵循確保可調(diào)用對象是靜態(tài)函數(shù)來添加_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貢獻- 4年前)

對于其他故障排除此函數(shù)意外問題的人,請注意最后一個參數(shù),特別是$函數(shù),它必須是一個字符串,函數(shù)名,而不是對函數(shù)本身的調(diào)用。業(yè)余的錯誤,我知道,但有時你只是犯了最簡單的錯誤。

缺點:

add_menu_page('My Custom Page', 'My Custom Page', 'manage_options', 'my-top-level-slug', my-output-function());

優(yōu)勢:

add_menu_page('My Custom Page', 'My Custom Page', 'manage_options', 'my-top-level-slug', 'my-output-function');

(由tripflex提供- 3年前)

為了進一步說明添加一個頁面而不顯示在菜單/子菜單中,使用以下代碼:

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訪問此頁面:

/wp-admin/options.php?page=my-custom-submenu-page

(由isMike()貢獻- 11個月前)

如果在類中工作,add_submenu_page的“function”參數(shù)應(yīng)該是一個數(shù)組,數(shù)組中的第一個值是類的實例,而數(shù)組中的第二個值是對象中的一個方法(以字符串的形式給出)。

在下面的例子

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貢獻- 4個月前)

關(guān)于上面“更多信息”部分的第一個提示,你也可能會遇到“對不起,您不允許訪問此頁面?!毕ⅲ词鼓颜_地鉤入admin_menu鉤子。如果所有這些都為真,則會出現(xiàn)此錯誤信息:

父頁面是使用add_menu_page添加的自定義頁面

父頁面是在另一個插件中創(chuàng)建的,而不是創(chuàng)建子菜單頁面的同一個插件

您沒有為add_submenu_page調(diào)用向admin_menu鉤子添加較低的優(yōu)先級,因此子菜單頁可能在父頁面之前被觸發(fā),從而導(dǎo)致錯誤。

解決方案:向創(chuàng)建子菜單頁面的操作添加較低的優(yōu)先級,如99。例如:

add_action( 'admin_menu', 'wpdocs_register_my_custom_submenu_page', 99 );

(rtpHarry于6個月前貢獻)

如果你想把你的自定義子頁面的url如下:

https://www.example.com/wp-admin/admin.php?page=custom-settings

那你應(yīng)該使用父彈頭的自定義設(shè)置。

在我的用例中,我想把一個自定義分類法放在一個ACF選項頁面下,我使用了這個:

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'

);

TAg

加載中~

本網(wǎng)站LOGO受版權(quán)及商標保護,版權(quán)登記號:國作登字-2022-F-10126915,未經(jīng)湖南木星科技官方許可,嚴禁使用。
Copyright ? 2012-2022 湖南木星科技有限公司(木星網(wǎng))版權(quán)所有
轉(zhuǎn)載內(nèi)容版權(quán)歸作者及來源網(wǎng)站所有,本站原創(chuàng)內(nèi)容轉(zhuǎn)載請注明來源,商業(yè)媒體及紙媒請先聯(lián)系:aishangyiwan@126.com

工信部備案號:湘ICP備19012813號-5