Удаление страницы администратора, добавленной сторонним плагином. В этом примере формируется гравитация


Я пытаюсь скрыть страницу справки от редакторов, добавленную плагином 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');
Author: Andrew, 2012-04-07

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 не отображается в этом списке. Это должно быть добавлено вручную через интерфейс плагина...

enter image description here

После этого и пометки возможности полного доступа 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 );

Интересующий плагин

Администрирование делает это скрытие магии в мгновение ока и является полностью профессиональным.

 3
Author: brasofilo, 2020-06-15 08:21:38

Вам нужно добавить свой крючок в конец очереди, а затем удалить меню с помощью 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 );
 8
Author: Eugene Manuilov, 2012-07-16 12:24:21

Плагин 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 )
;

Надеюсь, это поможет.

 2
Author: D-B, 2014-11-21 09:38:04

Это сводило меня с ума. Ответы, представленные здесь, помогли мне в большей части, но этот конкретный пункт меню "Формы гравитации" немного странный.

Мне удалось добраться до его корня, проанализировав глобальную переменную $submenu, которая содержит все данные меню. Следующий фрагмент кода должен отключить для вас пункт подменю "Обновить" при подключении к admin_menu(), как указано выше:)

remove_submenu_page( 'gf_edit_forms', 'gf_update' ); 
 1
Author: user14386, 2014-04-30 16:19:00

Ничто из вышеперечисленного не сработало для меня, но, по крайней мере, я могу скрыть это с помощью CSS.

#toplevel_page_gf_help{отображение:отсутствует;}

 0
Author: Manny Rodrigues, 2019-11-27 16:06:41