Pour un client qui a des éditeurs dans différentes organismes, il fallait impérativement que chaque éditeur ne voie que ce qu’il pouvait modifier.
J’ai donc trouvé des scripts à mettre dans le fichier functions.php qui me permettaient d’ajouter et supprimer des éléments dans le menu de l’admin.
Mais il me fallait ensuite encore cacher différents éléments sur toutes les pages. J’ai lors trouvé un script me permettant d’ajouter une feuille de style pour l’interface d’admin dans le thème du site ! Cela permet donc que le fichier css ne soit pas écrasé lors de la màj de WordPress.
Ensuite j’ai encore du trouver un script me permettant de mettre une classe dans le body de l’admin avec le rôle de l’utilisateur connecté. Cela me permet donc de m’adresser à chaque rôle individuellement dans mon fichier CSS.
Je compile ci-dessous tous les scripts tels que je les ai adaptés. Dans mes commentaires se trouvent les liens vers les sources originales.
Ajouter des éléments dans le menu
// add pages to admin menu //https://stackoverflow.com/questions/39978561/how-to-add-custom-link-on-wordpress-admin-sidebar add_action( 'admin_menu', 'linked_url' ); function linked_url() { add_menu_page( 'linked_url', 'FAQ', 'read', '/post.php?post=29&action=edit', '', 'dashicons-text', 50 ); add_menu_page( 'linked_url', 'Liens utiles', 'read', '/post.php?post=49&action=edit', '', 'dashicons-admin-links', 55 ); // on va ajouter le lien vers la page d'accueil uniquement pour éditeur plus bas } // si lien externe dans admin menu // add_action( 'admin_menu' , 'linkedurl_function' ); // function linkedurl_function() { // global $menu; // $menu[1][2] = "http://www.example.com"; // }  
Ajouter un séparateur dans le menu
add_action( 'admin_menu', 'add_admin_menu_separator' ); function add_admin_menu_separator() { add_menu_page( '', '', 'read', 'wp-menu-separator', '', '', '21' ); add_menu_page( '', '', 'read', 'wp-menu-separator', '', '', '56' ); // add_submenu_page( 'edit.php?post_type=page', 'wp-menu-separator', '', 'read', '11', '' ); }
Remove elements from editor menu
// remove elements from editor menu function remove_menus(){ // get current login user's role $roles = wp_get_current_user()->roles; // test role if( !in_array('editor',$roles)){ return; } //remove menu from site backend. remove_menu_page( 'index.php' ); //Dashboard remove_menu_page( 'edit.php' ); //Posts remove_menu_page( 'upload.php' ); //Media remove_menu_page( 'edit-comments.php' ); //Comments remove_menu_page( 'themes.php' ); //Appearance remove_menu_page( 'plugins.php' ); //Plugins // remove_menu_page( 'profile.php' ); //profile // remove_menu_page( 'users.php' ); //Users remove_menu_page( 'tools.php' ); //Tools remove_menu_page( 'options-general.php' ); //Settings // remove_menu_page( 'edit.php?post_type=page' ); //Pages // remove_menu_page('edit.php?post_type=testimonial'); // Custom post type 1 // remove_menu_page('edit.php?post_type=homeslider'); // Custom post type 2 remove_menu_page( 'WPML' ); remove_menu_page( 'Traductions' ); remove_menu_page( 'wpml_manage_languages' ); remove_menu_page( 'sitepress-multilingual-cms/menu/languages.php' ); remove_menu_page( 'admin.php?page=wpml-translation-management/menu/translations-queue.php' ); remove_menu_page( 'admin.php' ); // remove_menu_page( '#toplevel_page_wpml-translation-management-menu-translations-queue' ); // ajout lien vers page d'accueil add_menu_page( 'linked_url', 'Page d\'accueil', 'read', '/post.php?post=5&action=edit', '', 'dashicons-admin-home', 0 ); add_menu_page( 'linked_url', 'Page Contact', 'read', '/post.php?post=286&action=edit&lang=fr', '', 'dashicons-email-alt', 30 ); } add_action( 'admin_menu', 'remove_menus' , 100 );
// add lang class to <body> function append_language_class($classes) { $classes[] = 'lang-' . ICL_LANGUAGE_CODE; return $classes; } add_filter('body_class', 'append_language_class');
/** * Enqueue a script in the WordPress admin on edit.php. * * @param int $hook Hook suffix for the current admin page. */ function wpdocs_selectively_enqueue_admin_script( $hook ) { if ( 'post.php' != $hook ) { return; } wp_enqueue_script( 'my_custom_script', get_stylesheet_directory_uri() . '/js/scripts-admin.js', array(), '1.0' ); } add_action( 'admin_enqueue_scripts', 'wpdocs_selectively_enqueue_admin_script', PHP_INT_MAX ); // pour pouvoir styliser admin (et masquer éléments) // custom admin style sheet function my_admin_head() { echo '<link href="'.get_stylesheet_directory_uri().'/css/wp-admin.css" rel="stylesheet" type="text/css">'; } add_action('admin_head', 'my_admin_head');