WordPress | 31 de octubre de 2013

Eliminar ítems del menú de administración de WordPress


Notice: Undefined offset: 0 in /home/francisc/public_html/wp-content/themes/FranciscoAMK-2017/single.php on line 42

WordPress va genial en cuanto a gestionar sitios y se comporta muy bien tanto para webs pequeñas como para las más complejas, aunque en ocasiones, me he encontrado con que el sitio que estoy creando es demasiado simple y varias de las opciones disponibles no serían utilizadas, así que ¿por qué no borrarlas del área de administración?

En un sitio que desarrollé esta semana, lo que necesitaba era eliminar del menú de administración el ítem Entradas y el ítem Comentarios, ya que el sitio no tendrá una sección de noticias o blog, por ende tampoco gestionará comentarios al menos hasta el desarrollo de un nuevo tema. Así que vamos a utilizarlo como ejemplo.

Para poder cumplir con este objetivo vamos a hacer uso de la función de WordPress remove_menu_page, que tal como su nombre lo indica, nos permitirá remover páginas del menú de administración.

Su uso es el siguiente:

remove_menu_page('edit.php');

Edit.php es la página desde donde podemos gestionar las entradas, entonces con esta función estaremos eliminando el ítem entradas y todos sus subitems del menú.

Puedes reemplazar edit.php por alguna de las siguientes páginas para eliminarlas:

  • Escritorio: index.php
  • Entradas: edit.php
  • Medios: upload.php
  • Páginas: edit.php?post_type=page
  • Comentarios: edit-comments.php
  • Apariencia: themes.php
  • Plugins: plugins.php
  • Usuarios: users.php
  • Herramientas: tools.php
  • Ajustes: options-general.php

Si tienes algún ítem de menú exclusivo para editar un custom post type puedes usar lo siguiente (similar a lo que usamos para las páginas), reemplazando «custom_post_type» por el slug de tu custom post type:

  • Custom post type: edit.php?post_type=custom_post_type

Además si algún plugin ha añadido un ítem extra al menú, también puedes eliminarlo. Para ello debes observar la url a la cual se dirige una vez que clickeas sobre él. En este caso, eliminaré el ítem que se añade al instalar Sucuri Scanner:

  • Sucuri Free: admin.php?page=sucuriscan

Pero no tan rápido. Para que esta función nos dé el resultado que deseamos, será necesario crear un Action Hook para decidir en qué momento se ejecutará. Para ello, usaremos admin_menu.

add_action( 'admin_menu', 'apk_eliminar_admin_menu_links' );

Con esta línea estamos indicando a WordPress que al momento de cargar la funcionalidad de admin_menu, también ejecute la función apk_eliminar_admin_menu_links. Así que vamos a crear esa función:

function apk_eliminar_admin_menu_links() {
    remove_menu_page('edit.php'); // Removemos el ítem Entradas
    remove_menu_page('edit-comments.php'); // Removemos el ítem comentarios
}

Como puedes ver, dentro de nuestra función personalizada, estamos eliminando el ítem entradas y el ítem comentarios.

Por último, vamos a decidir para qué tipo de usuarios vamos a eliminar estos elementos, ya que probablemente queramos ocultarlos para los usuarios con perfil de editor o inferior y mantenerlos presente para los usuarios tipo administrador. Para ello usamos lo siguiente:

function apk_eliminar_admin_menu_links() {

    $user = wp_get_current_user(); //Obtenemos los datos del usuario actual

    if ( ! $user->has_cap( 'manage_options' ) ) { // Si es que el usuario no tiene rol de administrador
        remove_menu_page('edit.php'); // Removemos el ítem Entradas
        remove_menu_page('edit-comments.php'); // Removemos el ítem comentarios
    }
}

El código completo que deberías añadir al final del archivo functions.php de tu tema activo sería el siguiente, en donde puedes cambiar el nombre de la función por una que se adecúe a tu sitio/tema y también debes modificarlo de acuerdo a los ítems que quieras eliminar:

//MODIFICAR MENÚ DE ADMINISTRACIÓN DE WORDPRESS
add_action( 'admin_menu', 'apk_eliminar_admin_menu_links' );

function apk_eliminar_admin_menu_links() {

    $user = wp_get_current_user(); //Obtenemos los datos del usuario actual

    if ( ! $user->has_cap( 'manage_options' ) ) { // Si es que el usuario no tiene rol de administrador
        remove_menu_page('edit.php'); // Removemos el ítem Entradas
        remove_menu_page('edit-comments.php'); // Removemos el ítem comentarios
    }
}

Espero que esto te haya sido de ayuda. Si tienes una duda o algo que agregar te invito a dejar un comentario, y si quieres aprender más en detalle a crear y editar sitios en WordPress deberías suscribiste en el formulario que aparece a continuación: