Удалить страницу меню

У меня есть фрагмент кода, который я написал в файле functions.php, который просто удаляет страницы меню, если пользователь не может активировать плагины. Он работает по назначению; однако он показывает ошибку PHP в области администрирования только в том случае, если зарегистрированный пользователь является администратором.

Вот фрагмент кода:

<?php /************ Remove admin menu items from anyone who isn't an admin ************/ if (!current_user_can('activate_plugins') ) { function my_remove_menu_pages() { remove_menu_page('link-manager.php'); remove_menu_page('tools.php'); remove_menu_page('edit-comments.php'); } }; add_action( 'admin_menu', 'my_remove_menu_pages' ); ?> 

Вот ошибка:

 Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'my_remove_menu_pages' not found or invalid function name in /var/www/vhosts/mydomain.com/httpdocs/wp-includes/plugin.php on line 406 

Я пробовал переписывать фрагмент несколькими разными способами, и каждый раз, когда он в основном делает то же самое. Работает по назначению, удаляя страницы меню администратора меньше, чем админы, но дает ту же ошибку в бэкэнде WP при регистрации в качестве администратора. Любые предложения или мысли по этому поводу?

Поместите строку add_action внутри if (!current_user_can('activate_plugins') ) { :

 <?php /************ Remove admin menu items from anyone who isn't an admin ************/ if (!current_user_can('activate_plugins') ) { function my_remove_menu_pages() { remove_menu_page('link-manager.php'); remove_menu_page('tools.php'); remove_menu_page('edit-comments.php'); } add_action( 'admin_menu', 'my_remove_menu_pages' ); }; ?> 

Вы определяете свою функцию только тогда, когда пользователь не может активировать «активировать», но вы все время пытаетесь использовать эту функцию. Вам будет лучше делать то, что предложил Майк Мадерн в комментарии:

 if (!current_user_can('activate_plugins') ) { function my_remove_menu_pages() { remove_menu_page('link-manager.php'); remove_menu_page('tools.php'); remove_menu_page('edit-comments.php'); } add_action( 'admin_menu', 'my_remove_menu_pages' ); } 

Или это:

 function my_remove_menu_pages() { remove_menu_page('link-manager.php'); remove_menu_page('tools.php'); remove_menu_page('edit-comments.php'); } if (!current_user_can('activate_plugins') ) { add_action( 'admin_menu', 'my_remove_menu_pages' ); } 

Это должно избавиться от Warning . Я все еще обеспокоен этим. Вы должны уметь отображать и скрывать различные страницы, манипулируя ролями и возможностями пользователя. Именно так я предлагаю вам сделать это, а не просто грубую силу, удаляя страницы администрирования. Вы можете причинить себе какие-то проблемы таким образом. Вам понадобится плагин для каких-либо подробных манипуляций с пользовательскими возможностями или для написания своего собственного кода.