El objetivo de este artículo, es mostrar como ocultar diferentes opciones del menú de wordpress, de tal manera que los usuarios, basados en ciertos roles, solo puedan ver, las opciones del menú relacionados con su aplicación.
Cuando se creo el artículo, los plugins que hacen eso no son gratis por lo que se tendrá que hacer usando programación.
Existe un plugin que se llama code snippets, que permite agregar código y no se perderán los cambios en caso de que se cambie de tema o se requiera desactivar algún plugin.
Instalar Plugin Code Snippets
Instalar el plugin de forma regular
¿Cómo eliminar los elementos del menú de administrador de primer nivel de WordPress?
Preste atención a los comentarios dentro del código porque esto le dirá qué parte del código elimina qué. Entonces, si desea eliminar el menú Publicaciones, simplemente descomente y deje esta parte.
remove_menu_page( 'edit.php' ); //Posts
Ahora, esta función a continuación le mostrará cómo eliminar los elementos del menú de administración de primer nivel (comentarios, complementos, herramientas, etc.) Recuerde que si oculta el menú de primer nivel, todos los submenús se ocultarán automáticamente. Además, este fragmento eliminará la opción "Actualizar", el submenú que se encuentra en el menú Tablero
function hide_menu() { /* DASHBOARD */ // remove_menu_page( 'index.php' ); // Dashboard + submenus // remove_menu_page( 'about.php' ); // WordPress menu remove_submenu_page( 'index.php', 'update-core.php'); // Update /* REMOVE DEFAULT MENUS */ remove_menu_page( 'edit-comments.php' ); //Comments remove_menu_page( 'plugins.php' ); //Plugins remove_menu_page( 'tools.php' ); //Tools remove_menu_page( 'users.php' ); //Users // remove_menu_page( 'edit.php' ); //Posts // remove_menu_page( 'upload.php' ); //Media // remove_menu_page( 'edit.php?post_type=page' ); // Pages // remove_menu_page( 'themes.php' ); // Appearance // remove_menu_page( 'options-general.php' ); //Settings
} add_action('admin_head', 'hide_menu');
Si tiene menús relacionados con complementos de terceros que necesita eliminar, simplemente agregue una nueva línea, tome una última parte de la URL del menú y reemplácela dentro del código. Por ejemplo: si quiero eliminar Elementor, la URL completa es https://yoursite.com/wp-admin/admin.php?page=elementor
Grab the last part “elementor” and add it to the code like this:
remove_menu_page( 'elementor' );
¿Cómo eliminar los elementos del submenú del menú de administración de WordPress?
Esta vez usaremos remove_submenu_page con dos partes. Vea este código aquí abajo.
remove_submenu_page( 'options-general.php', 'options-writing.php');
Este código eliminará el subenú Escritura (opción-escritura.php) que se encuentra en el menú Configuración (opciones-general). Entonces, si desea eliminar el submenú, deberá cambiar ambas partes dentro del código.
¿Cómo eliminar menús o submenús relacionados con complementos de terceros?
Tengo un complemento llamado Fluent Forms instalado y quiero eliminar el submenú Configuración global. Ahora echaré un vistazo a la URL del elemento del menú de primer nivel de Fulent forms, que es https://yousite.com/wp-admin/admin.php?page=fluent_forms (¿ve la parte en negrita? copialo).
A continuación, tomaré una URL del submenú de configuración global que es https://yoursite.com/wp-admin/admin.php?page=fluent_forms_settings (¿ve la parte en negrita? copialo).
Bueno, ahora tiene las dos partes que necesitaría usar en este código para eliminar el submenú Configuración global:
remove_submenu_page( 'fluent_forms', 'fluent_forms_settings');
¿Cómo eliminar los menús y submenús de la página de configuración de WordPress?
Ahora, para hacer su vida un poco más fácil, aquí hay un fragmento que le dará un buen punto de partida. Esto eliminará los submenús de la página de configuración. Si desea eliminar todo el menú de configuración (con submenús), agregue esta línea a su sinppet.
remove_menu_page( 'options-general.php' ); //Settings
Una vez más, comente o elimine estas líneas que no desea eliminar y descomente las que necesita eliminar.
function hide_submenu() {
/* REMOVE SETTINGS PAGE SUBMENUS */
// remove_submenu_page( 'options-general.php', 'options-permalink.php'); // Permalinks
remove_submenu_page( 'options-general.php', 'options-writing.php'); // Writing
remove_submenu_page( 'options-general.php', 'options-reading.php'); // Reading
remove_submenu_page( 'options-general.php', 'options-discussion.php'); // Discussion
remove_submenu_page( 'options-general.php', 'options-media.php'); // Media
// remove_submenu_page( 'options-general.php', 'options-general.php'); // General
remove_submenu_page( 'options-general.php', 'options-privacy.php'); // Privacy
}
add_action('admin_head', 'hide_submenu');
¿Cómo eliminar el elemento del menú de administración del personalizador de WordPress?
Probablemente no sea una buena idea eliminar el menú Apariencia porque también ocultaría los elementos del submenú Widgets y Menus. Por lo tanto, considérelo detenidamente. De lo contrario, si desea eliminar los submenús de Apariencia, agregue estas líneas dentro de uno de los fragmentos que usó anteriormente.
// remove_submenu_page( 'themes.php', 'widgets.php' ); // hide Widgets
// remove_submenu_page( 'themes.php', 'nav-menus.php' ); // hide Menus
remove_submenu_page( 'themes.php', 'themes.php' ); // hide the theme selection submenu
remove_submenu_page('themes.php', 'theme-editor.php'); // hide Theme editor
Sin embargo, hay un problema más: el personalizador, que necesita un fragmento de código un poco diferente.
$customizer_url = add_query_arg( 'return', urlencode( remove_query_arg( wp_removable_query_args(), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ), 'customize.php' );
remove_submenu_page( 'themes.php', $customizer_url );
¿Cómo eliminar elementos del menú de administración de WordPress para roles de usuario específicos?
Este es el escenario para ti.
Creaste un sitio para tu cliente
Necesita acceso al sitio
El cliente necesita derechos de administrador, pero usted no quiere que acceda a todos los menús.
¿Entonces lo que hay que hacer? Bueno, creemos una nueva función de usuario que tenga todos los derechos de administrador, pero la función se llama Manager del sitio.
¿Cómo clonar un rol de usuario de administrador de WordPress?
add_action('init', 'cloneRole');
function cloneRole() {
$adm = get_role('administrator');
$adm_cap= array_keys( $adm->capabilities ); //get administator capabilities
add_role('site_admin', 'Site admin'); //create new role
$new_role = get_role('site_admin');
foreach ( $adm_cap as $cap ) {
$new_role->add_cap( $cap ); //clone administrator capabilities to new role
}
}
Presione el botón "Guardar y activar" y se clona el rol. Ahora puede eliminar este fragmento de código.
Lo anterior, también se puede hacer usando el plugin “Members“, lo puedes instalar, clonar el perfil de admin, modificas los permisos, y después puedes deshabilitar el plugin.
¿Cómo eliminar elementos del menú de administración de WordPress para roles de usuario específicos?
Es bastante fácil. Eche un vistazo a la barra de rol en el fragmento que usamos para clonar un rol. Hay un rol de usuario llamado Administrador del sitio y el slug es site_admin. Escríbalo porque lo va a necesitar ahora.
Ahora, si desea eliminar los elementos del menú de administración de WordPress para un rol de usuario específico (administrador del sitio, por ejemplo), deberá modificar un poco su fragmento. Algo como esto
function hide_siteadmin() {
// Use this for specific user role. Change site_admin part accordingly
if (current_user_can('site_admin')) {
/* DASHBOARD */
remove_submenu_page( 'index.php', 'update-core.php'); // Update
}
}
add_action('admin_head', 'hide_siteadmin');
Como puede ver, eliminamos el submenú Actualizar para el rol de usuario administrador del sitio.
¿Cómo eliminar elementos del menú de administración de WordPress para usuarios específicos?
Una vez más, esto es bastante fácil. Esta vez, necesitaría modificar su fragmento para que se parezca a este que se muestra a continuación
function hide_demouser() {
// Change username "demouser"
$user = wp_get_current_user();
if($user && isset($user->user_login) && 'demouser' == $user->user_login) {
/* DASHBOARD */
remove_submenu_page( 'index.php', 'update-core.php'); // Update
}
}
add_action('admin_head', 'hide_demouser');
Vamos a poner todo junto
Si todo lo que describí aquí es un poco confuso, simplemente tome este código aquí abajo y elimine las líneas que no necesita. Contiene todo lo que le mostré anteriormente y elimina los elementos del menú para el rol de usuario Administrador del sitio. Dentro del código hay una parte comentada para Demouser.
Como beneficio adicional, incluí algunos ejemplos de los menús de complementos conocidos que quizás desee eliminar.
function hide_menu() {
// Use this for specific user role. Change site_admin part accordingly
if (current_user_can('site_admin')) {
// Uncomment the part below if you need it to specific user. Change username "demouser"
/* $user = wp_get_current_user();
if($user && isset($user->user_login) && 'customer' == $user->user_login) { */
/* DASHBOARD */
// remove_menu_page( 'index.php' ); // Dashboard + submenus
// remove_menu_page( 'about.php' ); // WordPress menu
remove_submenu_page( 'index.php', 'update-core.php'); // Update
/* WP DEFAULT MENUS */
remove_menu_page( 'edit-comments.php' ); //Comments
remove_menu_page( 'plugins.php' ); //Plugins
remove_menu_page( 'tools.php' ); //Tools
remove_menu_page( 'users.php' ); //Users
// remove_menu_page( 'edit.php' ); //Posts
// remove_menu_page( 'upload.php' ); //Media
// remove_menu_page( 'edit.php?post_type=page' ); //Pages
// remove_menu_page( 'themes.php' ); //Appearance
// remove_menu_page( 'options-general.php' ); //Settings
/* SETTINGS PAGE SUBMENUS */
//remove_submenu_page( 'options-general.php', 'options-permalink.php'); // Permalinks
remove_submenu_page( 'options-general.php', 'options-writing.php'); // Writing
remove_submenu_page( 'options-general.php', 'options-reading.php'); // Reading
remove_submenu_page( 'options-general.php', 'options-discussion.php'); // Discussion
remove_submenu_page( 'options-general.php', 'options-media.php'); // Media
//remove_submenu_page( 'options-general.php', 'options-general.php'); // General
remove_submenu_page( 'options-general.php', 'options-privacy.php'); // Privacy
/* APPEARANCE SUBMENUS */
// remove_submenu_page( 'themes.php', 'widgets.php' ); // hide Widgets
// remove_submenu_page( 'themes.php', 'nav-menus.php' ); // hide Menus
remove_submenu_page( 'themes.php', 'themes.php' ); // hide the theme selection submenu
remove_submenu_page('themes.php', 'theme-editor.php'); // hide Theme editor
/* HIDE CUSTOMIZER MENU */
$customizer_url = add_query_arg( 'return', urlencode( remove_query_arg( wp_removable_query_args(), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ), 'customize.php' );
remove_submenu_page( 'themes.php', $customizer_url );
/* Plugin related submenus under Settings page */
remove_submenu_page( 'options-general.php', 'webpc_admin_page' ); // WebP converter
remove_submenu_page( 'options-general.php', 'kadence_blocks' ); // Kadence Blocks
/* 3rd party plugin menus */
// remove_menu_page( 'snippets' ); // Code snippets
// remove_menu_page( 'elementor' ); // Elementor
// remove_menu_page( 'rank-math' ); // Rank Math
// remove_menu_page( 'Wordfence' ); // Wordfence
// remove_menu_page( 'WPML' ); // WPML
// remove_menu_page( 'fluent_forms' ); // Fluent Forms
// remove_menu_page( 'ct-dashboard' ); // Blocksy
}
}
add_action('admin_head', 'hide_menu');
¿Cómo eliminar los elementos de la barra de administración de WordPress?
Una cosa más. Aunque eliminó elementos del menú del administrador de WordPress, hay un pequeño problema. Es decir: el elemento del menú del personalizador todavía está visible en la barra de administración del front-end. Por lo tanto, si desea eliminar los elementos de la barra de administración de Worpress, este fragmento eliminará algunos de ellos para el rol de usuario de administrador del sitio.
// Remove frontend admin bar items function remove_admin_bar_items($wp_admin_bar) { if (current_user_can('site_admin')) { // Plugin related admin-bar items $wp_admin_bar->remove_node('blocksy_preview_hooks'); // WordPress Core Items $wp_admin_bar->remove_node('updates'); $wp_admin_bar->remove_node('comments'); // $wp_admin_bar->remove_node('new-content'); $wp_admin_bar->remove_node('wp-logo'); //$wp_admin_bar->remove_node('site-name'); //$wp_admin_bar->remove_node('my-account'); //$wp_admin_bar->remove_node('search'); $wp_admin_bar->remove_node('customize'); } } add_action('admin_bar_menu', 'remove_admin_bar_items', 999);
¿Que hago si no se esconde el menu?
La razon por la que no se esconde un menu, es porque no estamos poniendo el slug correcto, para obtnerlo, ejecutar el siguiente codigo solo una vez y se obtendra el slug correcto del campo[02] de la salida.
//this will print the admin menu in array form so you can determine slug names from value [2] for use with remove_menu_page()
add_action( 'admin_init', 'print_admin_menu' );
function print_admin_menu() {
echo '' . print_r( $GLOBALS[ 'menu' ], TRUE) . '
';
}