Удаление страницы администратора, добавленной сторонним плагином. В этом примере формируется гравитация
Я пытаюсь скрыть страницу справки от редакторов, добавленную плагином gravity forms. Я полагаю, что раньше сталкивался с такой же проблемой с другими плагинами, поэтому я хотел бы знать, как правильно это сделать для сторонних плагинов. Это то, что у меня до сих пор не работает. Это, конечно, работает для других меню WP, поэтому мне интересно, ограничена ли функция только меню WP?
function remove_menu_links() {
if( !current_user_can('manage_options') ) {
remove_menu_page('admin.php?page=gf_help'); // this is the pages url
}
}
add_action( 'admin_menu', 'remove_menu_links');
5 answers
Хорошо, ответ Юджина работает в случае плагина, который не имеет дело с пользовательскими возможностями.
http://codex.wordpress.org/Roles_and_Capabilities
API плагинов WordPress позволяет добавлять, удалять и изменять роли и возможности. Поскольку плагины могут менять роли и возможности, в этой статье рассматриваются только те, которые используются по умолчанию.
Итак, если его код работает без проверки возможности, у нас есть чтобы посмотреть, как GravityForms выполняет свое действие add_submenu_page
.
И для этого мы помещаем всю папку плагинов в хороший редактор кода (Notepad++, TextMate и т. Д.) И выполняем глобальный поиск и находим наши материалы.
// wp-content/plugins/gravityforms/gravityforms.php
// all parameters removed from the original code, except $page_title and $capability
add_submenu_page(
$parent_slug,
__("Help", "gravityforms"),
$menu_title,
$has_full_access ? "gform_full_access" : $min_cap,
$menu_slug,
$function
);
И несколько строк, прежде чем мы увидим:
$has_full_access = current_user_can("gform_full_access");
$min_cap = GFCommon::current_user_can_which(GFCommon::all_caps());
if(empty($min_cap))
$min_cap = "gform_full_access";
Теперь мы переходим к Членам плагина, который, кстати, распознает GF, и у нас есть следующее на экране конфигурации для роли редактора.
НО ОТМЕЧАЯ, ЧТО gform_full_access
не отображается в этом списке. Это должно быть добавлено вручную через интерфейс плагина...
После этого и пометки возможности полного доступа remove_submenu_page
работает, как и ожидалось, для роли редактора.
Справочный код для всех подменю (запомните, что первое - это самое верхнее меню).
function remove_menu_links() {
if( !current_user_can( 'manage_options' ) ) {
// remove_submenu_page( 'gf_edit_forms', 'gf_edit_forms' );
// remove_submenu_page( 'gf_edit_forms', 'gf_new_form' );
// remove_submenu_page( 'gf_edit_forms', 'gf_new_formf_help' );
// remove_submenu_page( 'gf_edit_forms', 'gf_entries' );
// remove_submenu_page( 'gf_edit_forms', 'gf_settings' );
// remove_submenu_page( 'gf_edit_forms', 'gf_export' );
// remove_submenu_page( 'gf_edit_forms', 'gf_update' );
// remove_submenu_page( 'gf_edit_forms', 'gf_addons' );
remove_submenu_page( 'gf_edit_forms', 'gf_help' );
}
}
add_action( 'admin_menu', 'remove_menu_links', 9999 );
Интересующий плагин
Администрирование делает это скрытие магии в мгновение ока и является полностью профессиональным.
Вам нужно добавить свой крючок в конец очереди, а затем удалить меню с помощью slug:
function remove_menu_links() {
if( !current_user_can( 'manage_options' ) ) {
remove_menu_page( 'gf_edit_forms' ); // this is the pages url
}
}
add_action( 'admin_menu', 'remove_menu_links', 9999 );
Если вы хотите удалить подменю, вам нужно использовать следующий фрагмент кода:
function remove_menu_links() {
if( !current_user_can( 'manage_options' ) ) {
remove_submenu_page( 'gf_edit_forms', 'gf_help' );
}
}
add_action( 'admin_menu', 'remove_menu_links', 9999 );
Плагин GravityForms переименовывает пункт меню верхнего уровня, чтобы он соответствовал первому из подменю.
Например; если вы добавили только функцию gravityforms_view_entries в роль редактора, то первым пунктом подменю будет "Записи", поэтому родительским меню будет "gf_entries", а не "gf_edit_forms". Итак, следующий код удалит пункт "Справка" из подменю для редакторов с такой возможностью:
function remove_menu_links() {
remove_submenu_page( 'gf_entries', 'gf_help' );
}
add_action( 'admin_menu', 'remove_menu_links', 9999 )
;
Надеюсь, это поможет.
Это сводило меня с ума. Ответы, представленные здесь, помогли мне в большей части, но этот конкретный пункт меню "Формы гравитации" немного странный.
Мне удалось добраться до его корня, проанализировав глобальную переменную $submenu, которая содержит все данные меню. Следующий фрагмент кода должен отключить для вас пункт подменю "Обновить" при подключении к admin_menu(), как указано выше:)
remove_submenu_page( 'gf_edit_forms', 'gf_update' );
Ничто из вышеперечисленного не сработало для меня, но, по крайней мере, я могу скрыть это с помощью CSS.
#toplevel_page_gf_help{отображение:отсутствует;}