Вопрос или проблема
Я пытаюсь удалить меню из панели администратора
Мой код работает, так как он удаляет некоторые страницы, но я не могу удалить следующие.
admin.php?page=ot-theme-options
admin.php?page=ot-settings
admin.php?page=yith_woocompare_panel
add_action('admin_menu', 'remove_admin_menu_links');
function remove_admin_menu_links(){
$user = wp_get_current_user();
if( $user && isset($user->user_email) && '[email protected]' == $user->user_email ) {
remove_menu_page('tools.php');
remove_menu_page('options-general.php');
remove_menu_page('plugins.php');
remove_menu_page('users.php');
remove_menu_page( 'themes.php' );
remove_submenu_page( 'themes.php', 'widgets.php' );
remove_menu_page( 'wpcf7' );
remove_menu_page( 'ot-theme-options' ); // Не работает
remove_menu_page( 'ot-settings' ); // Не работает
//echo '<pre>' . print_r( $GLOBALS[ 'menu' ], TRUE) . '</pre>';
}
}
remove_submenu_page( 'themes.php', 'ot-theme-options' );
remove_submenu_page( 'themes.php', 'ot-settings' );
Ответ или решение
Чтобы удалить ссылки на определенные пункты меню в административной панели WordPress, можно использовать хук admin_menu
. В вашем случае вы пытаетесь удалить пункты меню для страниц ot-theme-options
, ot-settings
и yith_woocompare_panel
, но они не удаляются с помощью функций remove_menu_page
и remove_submenu_page
. Давайте рассмотрим, как это можно исправить.
Проблема
Ваша первоначальная функция remove_admin_menu_links
содержит несколько вызовов remove_menu_page
, но они, похоже, не работают для настроек темы (например, ot-theme-options
и ot-settings
). Возможно, это происходит из-за того, что для этих страниц используются уникальные идентификаторы, а не стандартные в WordPress. Поэтому важно выяснить правильные идентификаторы и убедиться, что вы правильно настраиваете свои вызовы.
Решение
-
Проверьте правильные идентификаторы страниц: Для удаления необходимо знать правильные значения идентификаторов для страниц, которые вы хотите скрыть. Если эти страницы создаются плагинами, возможно, они могут использовать разные идентификаторы.
-
Подходящая реализация функции:
Вот пример улучшенной функции, которая должна помочь:add_action('admin_menu', 'remove_admin_menu_links'); function remove_admin_menu_links() { $user = wp_get_current_user(); if ($user && isset($user->user_email) && '[email@example.com]' == $user->user_email) { // Удаление стандартных меню remove_menu_page('tools.php'); remove_menu_page('options-general.php'); remove_menu_page('plugins.php'); remove_menu_page('users.php'); remove_menu_page('themes.php'); // Удаление пунктов меню для определённых плагинов remove_menu_page('ot-theme-options'); // Проверьте идентификатор в $GLOBALS['menu'] remove_menu_page('ot-settings'); // Проверьте идентификатор в $GLOBALS['menu'] remove_menu_page('yith_woocompare_panel'); // Убедитесь в правильности // Если это подменю remove_submenu_page('themes.php', 'ot-theme-options'); remove_submenu_page('themes.php', 'ot-settings'); } }
-
Проверка наличия идентификаторов: Если указанные идентификаторы не работают, попробуйте вывести меню для диагностики. Вы можете отключить удаление меню временно и вывести содержимое
$GLOBALS['menu']
:echo '<pre>' . print_r($GLOBALS['menu'], true) . '</pre>';
-
Приоритет выполнения: Возможно, необходимо изменить приоритет выполнения вашего хука
admin_menu
. Это можно сделать, добавив третий параметр:add_action('admin_menu', 'remove_admin_menu_links', 99);
Используя вышеуказанные шаги, вы сможете точно указать и удалить ненужные элементы меню в административной панели WordPress в зависимости от логики вашего приложения. Не забывайте тестировать изменения на локальном или тестовом сайте перед внедрением на рабочем.