Vamos a ver algunos recursos para personalizar el área de administración de WordPress, también conocido como Escritorio o Dashboard. Una herramienta muy útil para esos proyectos en los que interesa que el propio cliente realice la gestión y mantenimiento de su sitio web. El escritorio de WordPress es un panel realmente intuitivo y sencillo, ideal para adaptarlo a las necesidades especificas de cada desarrollo.

Aunque existen plugins como White Label CMS que pueden servir de ayuda en esa personalización, nosotros vamos ver como tocando un poco el código del archivo functions.php del theme o plantilla vamos a poder cambiar el logo de WordPress de la pantalla del login, quitar o añadir ítems del menú del Escritorio, eliminar metaboxes de las entradas o tapar pestañas que no nos interesa que determinado usuario vea.

Después de Como convertir tu página web en WordPress a multi-idioma, el blog de GreenWeb se complace en presentar Como personalizar el Escritorio/Dashboard de WordPress. Disfruten.

1. Cambiar logo de WordPress en la pantalla de login:

Abrimos el archivo functions.php con el fin de editarlo, añadimos la siguiente función y comprobamos la ruta y el nombre de la imagen, en nuestro ejemplo: /img/logo.jpg. Guardamos y subimos.

function logo_wpadmin() {

   echo '<style type="text/css">
     h1 a { background-image:url('.get_bloginfo(
     'template_directory').'/img/logo.jpg); }
   </style>';
}
add_action('login_head', 'logo_wpadmin');

También podemos cambiar el logo de WordPress pequeño que aparece una vez dentro, en el Escritorio, arriba a la izquierda, se debe colocar el archivo con el logo dentro de /theme/images/ y debe tener un tamaño de 32 x 32px.

add_action('admin_head', 'my_custom_logo');

function my_custom_logo() {
   
   echo '<style type="text/css">
     #header-logo { background-image: url('.get_bloginfo(
     'template_directory').'/images/logo.jpg) !important;
   }</style>';
}

2. Añadir ítems al menú de WordPress:

Una buena opción para añadir una nueva pestaña en el Escritorio es hacer un plugin, abrimos en wp-content/plugins una carpeta que se llame por ejemplo “productos” y dentro creamos un archivo que se llame productos.php que sería así:

add_action('admin_menu','my_plugin_menu');

functionmy_plugin_menu(){
add_menu_page('Productos','Productos','edit_posts','productos','my_plugin_options');
}

functionmy_plugin_options(){
if(!current_user_can('edit_posts')){
wp_die(__('No tiene suficientes permisos 
        para acceder a esta página.'));
}?>
<div class="wrap">
<h1> Productos </h1>
<!-- CódigoHTML-->
</div>
<?php}

También podemos añadir ítems al menú del Escritorio desde el archivo functions.php, esta opción es muy sencilla ya que funciona desde un array en el que que definimos el nombre de la nueva pestaña, en nuestro ejemplo es “Impresoras”.

function impresoras_register() {

  $labels = array(
        'name' => __( 'Impresoras' ),
        'singular_name' => __( 'Impresoras' ),
        'add_new' => __( 'A&ntilde;adir Nueva' ),
        'add_new_item' => __( 'A&ntilde;adir nueva impresora' ),
        'edit_item' => __( 'Editar impresora' ),
        'new_item' => __( 'Nueva impresora'),
        'view_item' => __( 'Ver impresora'),
        'search_items' => __( 'Buscar impresora'),
        'not_found' =>  __('No se encontr&oacute; nada'),
        'not_found_in_trash' => __('No se encontr&oacute; 
        nada en la papelera'),
        'parent_item_colon' => ''
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => null,
        'supports' => array('title','thumbnail','editor'),
        'taxonomies' => array('category')
      );

    register_post_type( 'impresoras' , $args );
}

3. Eliminar ítems del menú de WordPress:

Podemos ocultar el menú de “Apariencia” para que nuestro cliente no pueda acceder a esta sección evitando que pueda eliminar accidentalmente el tema o temas. Otro menú importante que se puede desactivar es el menú de “Ajustes”. Hay que copiar el siguiente código en nuestro archivo functions.php:

function remove_menus () {

   global $menu;
        $restricted = array(__('Dashboard'), __('Posts'),
        __('Media'), __('Links'), __('Pages'), __('Appearance'),
        __('Tools'), __('Users'), __('Settings'), __('Comments'), 
        __('Plugins'));
        end ($menu);

    while (prev($menu)){
        $value = explode(' ',$menu[key($menu)][0]);
        if(in_array($value[0] != NULL?$value[0]:"" , 
        $restricted)){unset($menu[key($menu)]);}
        }
    }
add_action('admin_menu', 'remove_menus');

4. Eliminar metaboxes de las entradas

En ciertas ocasiones, cuando vamos a publicar una entrada, aparece en el editor de WordPress una cantidad de opciones que quizá el usuario o cliente no va a necesitar. Se pueden tapar añadiendo en el archivo functions.php el siguiente código:

if(is_admin()):
functionmy_remove_meta_boxes(){
if(!current_user_can('administrator')){
remove_meta_box('linktargetdiv','link','normal');
remove_meta_box('linkxfndiv','link','normal');
remove_meta_box('linkadvanceddiv','link','normal');
remove_meta_box('postexcerpt','post','normal');
remove_meta_box('trackbacksdiv','post','normal');
remove_meta_box('commentstatusdiv','post','normal');
remove_meta_box('postcustom','post','normal');
remove_meta_box('commentstatusdiv','post','normal');
remove_meta_box('commentsdiv','post','normal');
remove_meta_box('revisionsdiv','post','normal');
remove_meta_box('authordiv','post','normal');
remove_meta_box('sqpt-meta-tags','post','normal');
}
}
add_action('admin_menu','my_remove_meta_boxes');
endif;
La función remove_meta_box tiene tres parámetros, el primero es el “id” de la ventana que queremos eliminar, el segundo puede ser “page”, “post” o “link” dependiendo qué queramos y el tercero “normal”, “advanced” o “side” dependiendo dónde esté la ventana.

5. Desactivar widgets del Escritorio

Muchos widgets del escritorio son muy interesantes para gestionar una página pero en otras ocasiones necesitamos limpieza y tener sólo lo estrictamente necesario.

function custom_dashboard_widgets() {
    global $wp_meta_boxes;
   
    // var_dump( $wp_meta_boxes['dashboard'] );
       
    unset($wp_meta_boxes['dashboard']['normal']['core']
    ['dashboard_plugins']);
    unset($wp_meta_boxes['dashboard']['side']['core']
    ['dashboard_secondary']);
    unset($wp_meta_boxes['dashboard']['side']['core']
    ['dashboard_primary']);
    unset($wp_meta_boxes['dashboard']['normal']['core']
    ['dashboard_incoming_links']);
    unset($wp_meta_boxes['dashboard']['side']['core']
    ['dashboard_quick_press']);
}
add_action('wp_dashboard_setup', 'custom_dashboard_widgets');