Удаление узла панели администратора на основе роли

У меня есть пользовательская роль, grocery , что я хотел бы удалить узел «новый контент» (+ Новый выпадающий список) из верхней панели администратора, пока эта роль зарегистрирована. У меня есть следующая функция, но она удаляет ее в настоящее время для все роли, включая администратора. Хотелось бы найти способ ограничить это только пользовательской ролью «бакалея».

functions.php

 add_action( 'admin_bar_menu', 'remove_new_content_menu', 999 ); function remove_new_content_menu( $wp_admin_bar ) { $wp_admin_bar->remove_node( 'new-content' ); } 

Вам просто нужно проверить роль текущего пользователя

 add_action( 'admin_bar_menu', 'remove_new_content_menu', 999 ); function remove_new_content_menu( $wp_admin_bar ) { if ( in_array( 'grocery', (array) $user->roles ) ) { $wp_admin_bar->remove_node( 'new-content' ); } } 

Хотя лучшим вариантом может быть проверка определенной возможности, поскольку имена ролей могут измениться.

WP_User имеет array ролей .

Получите текущего пользователя с помощью wp_get_current_user() и проверьте, принадлежит ли ваша роль в массиве.


 add_action( 'admin_bar_menu', 'remove_new_content_menu', PHP_INT_MAX ); function remove_new_content_menu( $wp_admin_bar ) { // get the current user $user = wp_get_current_user(); // define roles that cannot see the `new content` button $blacklisted_roles = array('grocery', 'subscriber'); // remove the button if the current user has a blacklisted role if( array_intersect($blacklisted_roles, $user->roles ) ) { $wp_admin_bar->remove_node( 'new-content' ); } }