Функция «add_menu_page» добавляе пункт верхнего уровня в панель администрирования WordPress. В процессе создания пункта меню к нему прикрепляетс ястраница, которая отвечает за этот пункт.

Функция «add_menu_page» проверяет права доступа пользователя, чтобы отобразить пункт меню. Если у пользователя нет уровня доступа, то пункт меню не будет показан

У функции есть несколько аргументов:

add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );

Если число не указано, то пункт меню будет добавлен в конец списка. Список позиций системных пунктов:

); function show_page() < ?> Тело страницы ?>
Можно вынести код в файл:
А внутри файла «admin.php» будет:
Тело страницы

Добавление подпункта бокового меню

Функция «add_submenu_page» добавляет подпункт в уже существующий пункт меню. То есть дочернюю страницу (подраздел). Эта функция так же проверяет права пользователя, скрывая пункт, если прав на его просмотр было недостаточно.

Add Menu мод для Скайрима альтернатива консоли

У функции есть несколько аргументов:

add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function, $position );

Название Тип данных Описание
$parent_slug строка Ярлык (slug) родительского пункта меню, в который добавляется дочерний. Либо название файла страницы администрирования WordPress. Если поставить значение NULL, то страница не будет появляться в пункте меню. Примеры значений:
index.php или функция add_dashboard_page() — Консоль (Dashboard).

edit.php или функция add_posts_page() — Посты (Posts).

upload.php или функция add_media_page() — Медиафайлы (Media).

link-manager.php или функция add_links_page() — Ссылки (Links).

edit.php?post_type=page или функция add_pages_page() — Страницы (Pages).

edit-comments.php или функция add_comments_page() — Комментарии (Comments).

edit.php?post_type=your_post_type — Произвольные типы записей.

themes.php или функция add_theme_page() — Внешний вид (Appearance).

plugins.php или функция add_plugins_page() — Плагины (Plugins).

users.php или функция add_users_page() — Пользователи (Users).

tools.php или функция add_management_page() — Инструменты (Tools).

options-general.php или функция add_options_page() — Настройки (Settings).

Удаление пункта и подпункта бокового меню

Удалить пункт и подпункт бокового меню можно с помощью функций «remove_menu_page» и «remove_submenu_page» соответственно. Функция для удаления верхнего пункта меню принимает только один аргумент — ярлык (slug), который был указан при создании пункта. А для удаления подменю надо указать ярлык для родительского и дочернего пункт одномременно:

remove_menu_page( $menu_slug ); remove_submenu_page( $menu_slug, $submenu_slug );
Продемонстрируем, как можно удалить пункт меню и подпункты:
add_action( ‘admin_menu’, ‘remove_menu’ ); function remove_menu()< remove_menu_page( ‘plugins.php’ ); // удалим закладку плагинов remove_submenu_page( ‘plugins.php’, ‘myplugin’ ); // удалим пункт со своим плагином >

Источник: www.mousedc.ru

Как получить любую вещь в Skyrim. (AddItemMenu)

[SourcePawn] Урок 7 — Панели и Меню

Rabb1t

Амбассадор

Menu ( MenuHandler_MyMenu )
это же обратный вызов? то что в скобках?
Последнее редактирование: 27 Ноя 2016

DenisPukin

Капитан Костыль

А как поймать номер выбранной опции в панели?

Rabb1t

Амбассадор

public int Handler(Menu menu, MenuAction action, int param1, int param2) < if (action == MenuAction_Select param2 == %n) // Вместо %n — вставляй номер нужного пункта. < /* Делай что нужно. */ >>

DenisPukin

Капитан Костыль

SendPanelToClient(panel, client, Kit_Panel, 0);

Вот ошибка:
error 100 function prototypes do not match
— Добавлено позже —
Ты наверное так не поймешь нужно код скидывать.
— Добавлено позже —

new Handle:panel = CreatePanel(); SetPanelTitle(panel, «Coren n»); DrawPanelItem(panel, «1»); DrawPanelItem(panel, «2»); DrawPanelItem(panel, «3»); DrawPanelItem(panel, «Выход», ITEMDRAW_CONTROL); SendPanelToClient(panel, client, Panel, 0); CloseHandle(panel); public Panel(Handle:panel, MenuAction:action, client, param1, param2) < new Handle:kv = CreateKeyValues(«WeaponGroup»); FileToKeyValues(kv, «addons/sourcemod/configs/Core.txt»); if (action == MenuAction_Select) < if (param2 == 1) < if(KvJumpToKey(kv, «Terror»)) < decl String:sWeapon[64]; KvGetString(kv, «w1», sWeapon, sizeof(sWeapon)); GivePlayerItem(client, sWeapon); KvGetString(kv, «w2», sWeapon, sizeof(sWeapon)); GivePlayerItem(client, sWeapon); KvGetString(kv, «w3», sWeapon, sizeof(sWeapon)); GivePlayerItem(client, sWeapon); KvRewind(kv); CloseHandle(kv); >> else if (param2 == 2) < if(KvJumpToKey(kv, «SWAT»)) < decl String:sWeapon[64]; KvGetString(kv, «w1», sWeapon, sizeof(sWeapon)); GivePlayerItem(client, sWeapon); KvGetString(kv, «w2», sWeapon, sizeof(sWeapon)); GivePlayerItem(client, sWeapon); KvGetString(kv, «w3», sWeapon, sizeof(sWeapon)); GivePlayerItem(client, sWeapon); KvRewind(kv); >CloseHandle(kv); > else if (param2 == 3) < if(KvJumpToKey(kv, «Sniper»)) < decl String:sWeapon[64]; KvGetString(kv, «w1», sWeapon, sizeof(sWeapon)); GivePlayerItem(client, sWeapon); KvGetString(kv, «w2», sWeapon, sizeof(sWeapon)); GivePlayerItem(client, sWeapon); KvGetString(kv, «w3», sWeapon, sizeof(sWeapon)); GivePlayerItem(client, sWeapon); KvRewind(kv); >CloseHandle(kv); > >
— Добавлено позже —
Всё я разобрался.
Последнее редактирование: 2 Май 2017

Читайте также:  Как установить мод элин на Скайрим

Vit_ amin

Участник

Menu hMenu = new Menu ( MenuHandler_MyMenu , MenuAction_Cancel | MenuAction_Select | MenuAction_Display | MenuAction_DisplayItem );

Забыл добавить MenuAction_End

_wS_

Участник

Этот MenuAction_End может ввести в заблуждение, т.к. есть еще такая штука как:
native bool:VoteMenu(Handle:menu, clients[], numClients, time, flags=0);

Я вот привык что раз меню закрылось для игрока, то всё, ему капец (MenuAction_End), но вот если это голосование (VoteMenu), то MenuAction_End вызывается лишь после того, как все игроки закроют меню или время голосования истечёт. В заблуждение еще ввело то, что когда тестируешь с ботами, MenuAction_End срабатывает сразу же, но потестил с парнем, и оказывается оно вызывается в самом конце голосования. Один из заказов вынудил вникнуть в эту стандартную систему SM голосований, никогда раньше их не трогал, оказалось хорошая штука =)

DeathScore13

пирожок. пирожочек.

Заметил что тут нет описания CloseHandle(hPanel);, который я встречал в некоторых плагинах. Для чего он нужен?

Источник: hlmod.ru

add_submenu_page() │ WP 1.5.0

Добавляет дочернюю страницу (подраздел) указанного главного меню в админ-панели. Указав минимальные права пользователя, можно ограничить доступ к меню.

  • user_admin_menu — админ-меню пользователя.
  • network_admin_menu — чтобы добавить в меню мультисайт.
  • admin_menu — обычное административное меню.

Функция (параметр $function ), которая отвечает за вывод контента на странице должна проверять права пользователя отдельно и если нужно блокировать доступ к контенту.

Если у вас появляется ошибка «You do not have sufficient permissions to access this page.» при попытке зайти на страницу, это значит, что вы подключаете функцию слишком рано, вешаете функцию не на тот хук. Нужно использовать хук admin_menu .

Не используйте __FILE__ для параметра $menu_slug . Так вы получите нерабочий URL и дыру в защите.

При написании кода функции указанной в параметре $function , вам возможно нужны будут параметры указанные для add_submenu_page() , например $page_title . Получить их можно так:

  • $parent_slug — get_admin_page_parent() ;
  • $page_title — get_admin_page_title() или просто используйте глобальную переменную $title ;
  • $menu_slug — глобальная переменная $plugin_page

Если нужно добавить пункт меню верхнего уровня, используйте add_menu_page().

Основа для: add_options_page() , add_theme_page()

Возвращает

Строку|false . Название хука, результирующей страницы меню или false, если пользователь не имеет прав доступа к меню.

Использование

add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function, $position );
$parent_slug(строка) (обязательный)

Читайте также:  Скайрим безупречный сапфир где найти

Название (slug) родительского меню в которое будет добавлен пункт или название файла админ-страницы WordPress.

Используйте NULL, чтобы создать страницу, которая не будет появляться в пункте меню. Работает и для мультисайта.

  • index.php — Консоль (Dashboard). Или функция add_dashboard_page();
  • edit.php — Посты (Posts). Или функция add_posts_page();
  • upload.php — Медиафайлы (Media). Или функция add_media_page();
  • link-manager.php — Ссылки (Links). Или функция add_links_page();
  • edit.php?post_type=page — Страницы (Pages). Или функция add_pages_page();
  • edit-comments.php — Комментарии (Comments). Или функция add_comments_page();
  • edit.php?post_type=your_post_type — Произвольные типы записей.
  • themes.php — Внешний вид (Appearance). Или функция add_theme_page();
  • plugins.php — Плагины (Plugins). Или функция add_plugins_page();
  • users.php — Пользователи (Users). Или функция add_users_page();
  • tools.php — Инструменты (Tools). Или функция add_management_page();
  • options-general.php — Настройки (Settings). Или функция: add_options_page()
  • settings.php — Настройки (Settings) сети сайтов в MU режиме.

Уникальное название (slug), по которому затем можно обращаться к этому меню. Если нужно дублировать родительское меню, укажите $menu_slug такой же как у родительского меню.

Это название будет использоваться в качестве значение параметра запроса page в ссылке на страницу: ?page=название . Это уникальное название будет как бы привязано к функции указанной в следующем параметре $function .

По неофициальной информации, в этот параметр можно добавить путь до файла отвечающего за страницу этого пункта меню. Путь должен быть от каталога плагинов: допустим папка плагина называется my-plugin и файл страницы настроек options.php , тогда путь до файла будет такой: my-plugin/options.php .

$function(строка/массив)

Название функции которая будет вызваться, чтобы вывести контент создаваемой страницы.
Два варианта установки параметра:

  1. Если функция является методом класса, она вызывается по ссылке: array( $this, ‘function_name’ ) или статически: array( __CLASS__, ‘function_name’ ) .
  2. Во всех остальных случаях указываем название функции в виде строки.

$position(число) Позиция подпункта меню, относительно других подпунктов. Добавлено в WP 5.3.0.
По умолчанию: null

Примеры

#1 Подменю для произвольно-созданного меню

Если вы пытаетесь добавить пункт меню в основной раздел, который вы создали самостоятельно с помощью add_menu_page(), то первый пункт будет копией созданного пункта add_menu_page() . Это видно во всем меню WordPress.

Если вам нужен пункт подменю по такому сценарию, то для начала вам нужно создать дубль основного меню, а затем добавить подменю:

add_menu_page(‘Основное доп. меню’, ‘Мое основное меню’, ‘manage_options’, ‘my-top-level-slug’); add_submenu_page( ‘my-top-level-slug’, ‘Основное доп. меню’, ‘Мое основное меню’, ‘manage_options’, ‘my-top-level-slug’); add_submenu_page( ‘my-top-level-slug’, ‘Мое подменю’, ‘Страница настроек моего подменю’, ‘manage_options’, ‘my-secondary-slug’, ‘page_callback_function’);

#2 Добавим подменю в меню админ-панели «Инструменты» (tools):

// Добавим подменю в меню админ-панели «Инструменты» (tools): add_action(‘admin_menu’, ‘register_my_custom_submenu_page’); function register_my_custom_submenu_page() < add_submenu_page( ‘tools.php’, ‘Дополнительная страница инструментов’, ‘Название инструмента’, ‘manage_options’, ‘my-custom-submenu-page’, ‘my_custom_submenu_page_callback’ ); >function my_custom_submenu_page_callback() < // контент страницы echo »; echo ‘

‘. get_admin_page_title() .’

‘; echo »; >

#3 Прячем страницу из меню, но она все равно будет рабочей

Чтобы спрятать ссылку пункта подменю из основного меню админ-панели, используйте первый параметр null или ‘options.php’:

// Прячем страницу из меню, но она все равно будет рабочей add_action(‘admin_menu’, ‘register_my_custom_submenu_page’); function register_my_custom_submenu_page()< add_submenu_page( null, //or ‘options.php’ ‘Произвольная страница подменю’, ‘Произвольная страница подменю’, ‘manage_options’, ‘my-custom-submenu-page’, ‘my_custom_submenu_page_callback’ ); >

#4 Без указания функции страницы настроек (неофициально)

В официальной документации этого нет.

Читайте также:  Мод для Skyrim чтобы были потребности

В параметре $menu_slug можно указать путь до страницы опций, от каталога плагинов. В этом случае не нужно указывать функцию отвечающую за код страницы настроек. Для страницы настроек у нас будет отдельный файл. Предположим наш файл страницы настроек лежит в корне папки плагина и называется options.php , тогда страница настроек плагина регистрируется так:

Тут basename(dirname(__FILE__)).’/options.php’ равно название_папки_плагина/options.php .

#5 Проверка наличия пункта подменю

Добавить свой пример

Заметки

  • Global. Массив. $submenu
  • Global. Массив. $menu
  • Global. Массив. $_wp_real_parent_file
  • Global. true|false. $_wp_submenu_nopriv
  • Global. Массив. $_registered_pages
  • Global. Массив. $_parent_pages

Список изменений

С версии 1.5.0 Введена.
С версии 5.3.0 Added the $position parameter.

Код add_submenu_page() add submenu page WP 6.1.1

function add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $callback = », $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 ( null !== $position ! is_numeric( $position ) ) < _doing_it_wrong( __FUNCTION__, sprintf( /* translators: %s: add_submenu_page() */ __( ‘The seventh parameter passed to %s should be numeric representing menu position.’ ), ‘add_submenu_page()’ ), ‘5.3.0’ ); $position = null; > if ( null === $position || ( ! 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 < $position = absint( $position ); // 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( $callback ) ! empty( $hookname ) ) < add_action( $hookname, $callback ); >$_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; >

Cвязанные функции

Меню администрирования (admin menu)

  • add_menu_page()
  • add_options_page()
  • add_theme_page()
  • remove_menu_page()
  • remove_submenu_page()

Админ-панель

  • add_meta_box()
  • do_meta_boxes()
  • get_admin_page_title()
  • get_admin_url()
  • get_current_screen()
  • includes_url()
  • is_admin()
  • remove_meta_box()
  • wp_add_dashboard_widget()
  • wp_maintenance()

Источник: wp-kama.ru