10 trucos o hacks tutorial para personalizar el dashboard de Wordpress.
El siguiente tutorial recopila una serie de funciones que modifican el aspecto de Wordpress, es muy útil para programadores o freelance que están realizando la implementación del desarrollo de wordpress para un cliente o empresa.
El panel de control o dashboard de wordpress como ya sabemos es una herramienta muy potente desde la que podremos realizar las tareas de crear artículos, cambiar el tema, activar widgets y una serie de funcionalidades. Pero cuando se construye un site para un cliente, es especialmente importante ser capaz de controlar y editar el panel de control en función de las necesidades y la personalización que le queramos dar. Este artículo he recopilado 10 “hacks” que podemos usar para editar, extender o modificar funciones del dashbard o escritorio de Wordpress.
Eliminar menús del dashboard
Esta es una de las primeras tareas que necesitamos realizar cuando implementamos un wordpress para un cliente, y es ocultar y desactivar ciertos menús de la columna lateral izquierda. De manera que 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ú crítico que se tiene que desactivar es el menú de “Ajustes” o “Settings” (en inglés). Evitando que el cliente pueda alterar la configuración que hemos realizado del blog. Desde el siguiente ejemplo eliminaremos todos los menús que se indican en el array $restricted. Hay que copiar el siguiente código en nuestro archivo functions.php
1
2
3
4
5
6
7
8
9
10
11
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');
Personalizar con tu propio logo
También es importante dar una imagen corporativa en todo momento, y el cliente siempre nos los requerirá. De manera que la página principal de login, /wp-login.php, que muestra el formulario de acceso a nuestro dashboard, contiene el logotipo de Wordpress. Lo óptimo sería poner el logotipo de nuestro cliente o nuestro site.
Ver el siguiente artículo para editar el logotipo Personalizar la pagina de login de wordpress
Reemplazar el logo del panel de control o dashboard
Siguiendo con la dinámica anterior, a un cliente le gustará ver el logo en la página de login, pues también le gustará verlo en el panel de control. Para ello hay que añadir el siguiente código en functions.php
1
2
3
4
5
6
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/custom-logo.gif) !important; }</style>';
}
Deshabilitar el mensaje de actualización
Como ya sabemos wordpress va lanzando nuevas versiones, y cada vez que lo hace, el código alberga funciones que son capaces de comprobar la versión instalada con la ultima release. Cuando hay una nueva versión nos aparece el típico mensaje de “Please upgrade now”. Pues bien, a nosotros como programadores y administradores de wordpress, pues como que nos da igual, podemos actualizarlo cuando queremos, recomendable hacerlo cuanto antes, pero no está bien que este mensaje le aparezca al cliente.
Para evitar que aparezca este mensaje, incluiremos la siguiente línea en nuestro archivo functions.php
1
2
3
4
if ( !current_user_can( 'edit_users' ) ) {
add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
}
Eliminar widgets o paneles del escritorio
Los usuarios que acceden a Wordpress entran el la página principal de escritorio o dashboard, aquí se presenta mucha información en diferentes widgets. Es útil eliminar ciertos paneles que son irrelevantes para un cliente, o incluso para nuestro propio blog.
Colocar el siguiente código en functions.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function example_remove_dashboard_widgets() {
// array global metaboxes array, contiene todos los widgets para wp-admin
global $wp_meta_boxes;
// Elimina el widget de "incomming links"
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);
// Elimina el widget "right now
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);
}
// Hacemos un "Hook" o gancho a la acción 'wp_dashboard_setup' para registrar nuestra propia función
add_action('wp_dashboard_setup', 'example_remove_dashboard_widgets' );
Crear nuestro propio widget para el escritorio o dashboard de Wordpress
Desde el ejemplo anterior hemos borrado widgets del escritorio, ahora bien, incluiremos uno nuestro con un mensaje de bienvenida o lo que se nos ocurra o nos solicite nuestro cliente.
Seguimos editando el archivo functions.php
1
2
3
4
5
6
7
8
9
10
function example_dashboard_widget_function() {
// Aquí mostramos lo que queramos o necesitemos
echo "Bienvenido al panel de control del blog";
}
// Crea la función usando la accion de un "hook" o gancho
function example_add_dashboard_widgets() {
wp_add_dashboard_widget('example_dashboard_widget', 'Ejemplo de Widget en Escritorio', 'example_dashboard_widget_function');
}
add_action('wp_dashboard_setup', 'example_add_dashboard_widgets' );
Editar los estilos de panel de control
Siempre se puede editar los estilos del escritorio de Wordpress sin necesidad de editar los archivos del core, para ello se crea una función que simplemente añada las etiquetas de apertura y cierre de
Añadir el siguiente código en el archivo functions.php
1
2
3
4
function custom_colors() {
echo '<style type="text/css">#wphead{background:#069}</style>';
}
add_action('admin_head', 'custom_colors');
Como se puede ver en este ejemplo sigue el mismo patrón que el punto 3, donde hemos cambiado el logo del escritorio. La función es muy básica un echo que pinta el html con nuevos estilos que “atacan” o sobre-escriben los que ya hay.
Añadir mensajes de ayuda
Se pueden incluir mensajes de ayuda cuando un usuario entra en un menú determinado, ofreciéndole información relevante sobre que puede hacer. Estos son los mensajes que aparecen en el menú desplegable, cuando se pulsa sobre la pestaña “Ayuda” que aparece en la cabecera de nuestro panel de control en Wordpress.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
* Funcion que se encarga de modificar los textos de ayuda en el panel de control de wordpress.
*
* @param mixed $contextual_help, este es el texto de ayuda por defecto definido para una página en concreto.
* Se hereda desde otras librerías de wordpress y contendrá un valor ya definido.
* @param mixed $screen Esta es la página en la que estamos.
*
* @returns Siempre se devuelve el valor de $contextual_help. Puede que este no se sobreescriba cuando pase por el switch case, devolviendo su valor original.
* Si la página en la que estamos, está incluida en el switch case, el valor de la variable $contextual_help se sobreescribe con lo que añadamos.
*
* @version 1.0 Pedro Ventura. Actualmente esta funcionando para la version de WP 3.0.3
*
*/
function paneles_ayuda($contextual_help, $screen)
{
switch($screen)
{
# poner este case para hacer pruebas, despues quitarlo para un entorno en produccion.
case 'dashboard':
$contextual_help = 'Este mensaje de ayuda esta reemplanzando al que hay en la página principal del escritorio o dashboard';
break;
case PAGINA_EJEMPLO:
$contextual_help = 'Este es otro texto de ayuda para una nueva pagina del panel de control.';
break;
}
return $contextual_help;
}
/**
* Registramos la función paneles_ayuda, para la accion de contextual_help, que pinta los mensajes de ayuda del panel de control
* Los dos siguientes valores indican lo siguiente:
* 10 - Es la prioridad de la función. por defecto se suele usar 10.
* 2 -Indica el número de parámetros que enviamos a la función registrada. Si se quita este valor dará un error de "missing arguments"
* @link Para conocer más sobre la funcion add_action() de Wordpres visitar http://codex.wordpress.org/Function_Reference/add_action
*/
add_action( 'contextual_help', 'paneles_ayuda',10,2 );
Monitorizar los errores de de php
Este hack esta muy bien para entornos de desarrollo, y pre-producción, de manera que se puede ir comprobando todos los errores de php que puede ir generando nuestra aplicación.
Al mostrar los errores de php, es obvio que una vez terminado el trabajo y se le entregue la plataforma al cliente, este widget habrá que quitarlo.
Como todas estas funciones se añade en el archivo functions.php La única modificación que hay que hacer es introducir el path completo al archivo de log que se va a revisar desde la variable $logfile y comprobar que se tenga permisos de lectura sobre el archivo de log.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
function slt_PHPErrorsWidget() {
$logfile = '/home/path/logs/php-errors.log'; // Añadir el path completo a log de errores de apache
$displayErrorsLimit = 100; // El numero máximo de lineas que se mostrarán en el widget
$errorLengthLimit = 300; // El número máximo de caracteres que mostraremos por línea.
$fileCleared = false;
$userCanClearLog = current_user_can( 'manage_options' );
// Clear file?
if ( $userCanClearLog && isset( $_GET["slt-php-errors"] ) && $_GET["slt-php-errors"]=="clear" ) {
$handle = fopen( $logfile, "w" );
fclose( $handle );
$fileCleared = true;
}
// Read file
if ( file_exists( $logfile ) ) {
$errors = file( $logfile );
$errors = array_reverse( $errors );
if ( $fileCleared ) echo '<p><em>File cleared.</em></p>';
if ( $errors ) {
echo '<p>'.count( $errors ).' error';
if ( $errors != 1 ) echo 's';
echo '.';
if ( $userCanClearLog ) echo ' [ <b><a href="'.get_bloginfo("url").'/wp-admin/?slt-php-errors=clear" onclick="return confirm('Are you sure?');">CLEAR LOG FILE</a></b> ]';
echo '</p>';
echo '<div id="slt-php-errors" style="height:250px;overflow:scroll;padding:2px;background-color:#faf9f7;border:1px solid #ccc;">';
echo '<ol style="padding:0;margin:0;">';
$i = 0;
foreach ( $errors as $error ) {
echo '<li style="padding:2px 4px 6px;border-bottom:1px solid #ececec;">';
$errorOutput = preg_replace( '/[([^]]+)]/', '<b>[$1]</b>', $error, 1 );
if ( strlen( $errorOutput ) > $errorLengthLimit ) {
echo substr( $errorOutput, 0, $errorLengthLimit ).' [...]';
} else {
echo $errorOutput;
}
echo '</li>';
$i++;
if ( $i > $displayErrorsLimit ) {
echo '<li style="padding:2px;border-bottom:2px solid #ccc;"><em>More than '.$displayErrorsLimit.' errors in log...</em></li>';
break;
}
}
echo '</ol></div>';
} else {
echo '<p>No errors currently logged.</p>';
}
} else {
echo '<p><em>There was a problem reading the error log file.</em></p>';
}
}
// Add widgets
function slt_dashboardWidgets() {
wp_add_dashboard_widget( 'slt-php-errors', 'PHP errors', 'slt_PHPErrorsWidget' );
}
add_action( 'wp_dashboard_setup', 'slt_dashboardWidgets' );
Ocultar campos dependiendo del role del usuario
Cuando se esta editando un artículo hay ciertos paneles que aparecen, entre ellos el campo de texto donde se escribe, las revisiones del artículo, el panel donde aparece el autor, el panel donde aparecen los campos personalizados,etc..
Si tenemos un blog con diferentes tipos de roles, tales como administrador, autores, contribuidores,etc. Podemos ocultar el panel de campos personalizados para que no interfiera o confunda al otro usuarios.
De esta manera podemos añadir el siguiente código en functions.php para ocultar el panel de “campos personalizados” de la página de edición de un artículo para todos los usuarios.
1
2
3
4
5
6
add_action('admin_init','customize_meta_boxes');
function customize_meta_boxes() {
remove_meta_box('postcustom','post','normal');
}
Si lo que queremos es ocultar el panel de “campos personalizados” para usuarios con roles de autor o inferiores, añadimos el siguiente hook o gancho en el código, en functions.php
1
2
3
4
5
6
7
8
9
10
11
12
//hook the admin init
add_action('admin_init','customize_meta_boxes');
function customize_meta_boxes() {
//obtenemos la informacion del usuario
global $current_user;
get_currentuserinfo();
//si el nivel actual del usuario es 3 o menos se elimina el campo "postcustom", es decir "Campos personalizados"
if ($current_user->user_level < 3)
remove_meta_box('postcustom','post','normal');
}