Créer son interface backend Wordpress en fonction des rôles d'utilisateurs

Tutoriel par Montage203 · Discord

Ce tutoriel permet de créer sa propre interface backend Wordpress en fonction des rôles d'utilisateurs.


Étape 1: 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";
    // }

Étape 2: 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', '' );
    }

    // add_action('admin_init','dump_admin_menu');
    // function dump_admin_menu() {
    // if (is_admin()) {
    // header('Content-Type:text/plain');
    // var_dump($GLOBALS['menu']);
    // exit;
    // }
    // }

Étape 3: Enlever les commentaires partout

/* COMMENTS // https://www.powderkegwebdesign.com/quickly-easily-remove-comments-backend-wordpress/
* Remove comments in its entirety
*/


// Removes from admin menu
add_action( 'admin_menu', 'pk_remove_admin_menus' );
function pk_remove_admin_menus() {
remove_menu_page( 'edit-comments.php' );
}

// Removes from post and pages
add_action('init', 'pk_remove_comment_support', 100);
function pk_remove_comment_support() {
remove_post_type_support( 'post', 'comments' );
remove_post_type_support( 'page', 'comments' );
}

// Removes from admin bar
add_action( 'wp_before_admin_bar_render', 'pk_remove_comments_admin_bar' );
function pk_remove_comments_admin_bar() {
global $wp_admin_bar;
$wp_admin_bar->remove_menu('comments');
}

Étape 4: Enlever des éléments du 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_action( 'admin_menu', 'remove_menus' , 100 )

Étape 5: Ajouter la feuille de style admin dans le thème

// 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');

Étape 6: Ajouter la classe du rôle ou id utilisateur dans le body du backend

/**
* Add User Role Class to Body
* Referenced code from http://www.studiok40.com/
*/

//https://lakewood.media/add-user-role-id-body-class-wordpress/
function print_user_classes() {
if ( is_user_logged_in() ) {
add_filter('body_class','class_to_body');
add_filter('admin_body_class', 'class_to_body_admin');
}
}
add_action('init', 'print_user_classes');

// Add user role class to front-end body tag
function class_to_body($classes) {
global $current_user;
$user_role = array_shift($current_user->roles);
$classes[] = $user_role.' ';
return $classes;
}

/// Add user role class and user id to front-end body tag

// add 'class-name' to the $classes array
function class_to_body_admin($classes) {
global $current_user;
$user_role = array_shift($current_user->roles);
/* Adds the user id to the admin body class array */
$user_ID = $current_user->ID;
$classes = $user_role.' '.'user-id-'.$user_ID ;
return $classes;
return 'user-id-'.$user_ID;
}

Autres tutoriels