Skip to content

Instantly share code, notes, and snippets.

@PCianes
Last active January 11, 2019 08:22
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save PCianes/bd3148ee2c01fe4a542f3e46b56c139b to your computer and use it in GitHub Desktop.
Save PCianes/bd3148ee2c01fe4a542f3e46b56c139b to your computer and use it in GitHub Desktop.
Admin notices (avisos panel administración)
<?php
/**
* Some example snippets for the control of notices in WordPress admin panel
*
* @package PCianes\AdminUtilities
* @since 1.0.0
* @author PCianes
* @license GNU General Public License 2.0+
*/
namespace PCianes\AdminUtilities;
/**
* Add condicional notice in admin (example)
*
* @since 1.0.0
*
* @return void
*/
function add_admin_notice(){
$admin_page_with_notice = 'index.php';
$user_role_for_notice = 'administrator';
global $pagenow;
if ( !($pagenow == $admin_page_with_notice) ) {
return;
}
$current_user = wp_get_current_user();
if ( !in_array( $user_role_for_notice , (array) $current_user->roles ) ) {
return;
}
printf('<div class="notice notice-info is-dismissible">
<p>Click on <a href="edit.php">Posts</a> to start writing.</p>
<h1>HELLO WORLD!! This page is %s and you are %s</h1>
</div>',
$admin_page_with_notice, $user_role_for_notice);
}
add_action('admin_notices', __NAMESPACE__ . '\add_admin_notice', 11);
/**
* Delete all admin notices except for one user_ID
*
* @since 1.0.0
*
* @return void
*/
function delete_all_admin_notices() {
$admin_user_ID_with_notices = '1';
$user_role_for_notices = 'administrator';
$current_user = wp_get_current_user();
$current_user_data = $current_user->data;
if ( in_array( $user_role_for_notices, (array) $current_user->roles )
&& $current_user_data->ID == $admin_user_ID_with_notices ) {
return;
}
remove_all_filters( 'admin_notices');
}
add_action('admin_init', __NAMESPACE__ . '\delete_all_admin_notices', 999);
@PCianes
Copy link
Author

PCianes commented Jun 29, 2017

1- Función para crear avisos en panel administración.
2- Función para quitar todos los avisos excepto a un administrador concreto.

@flabernardez
Copy link

Eyyy genial! pero podrías poner la extensión en .php para que coloree la sintaxis? Gracias :D

@PCianes
Copy link
Author

PCianes commented Jun 29, 2017

Ups! Todavía no sé cómo funciona esto ;-)

@samuelaguilera
Copy link

Tienes que añadir <?php al inicio del snippet para que haga el coloreado de sintaxis. Si quieres un consejo, te recomendaría añadir comentarios en el código explicado lo que haces, ayudará a otros a entenderlo y a ti mismo cuando haga tanto tiempo que no uses el snippet que ni te acuerdes de haberlo usando jamás...

@planetahuevo
Copy link

planetahuevo commented Jun 29, 2017

Gracias! Te paso el código que yo he creado con tu ayuda, se debe cambiar el username en la función por el deseado.

function expwp_hide_notifications_to_all_but_superadmin_user() {
   if (get_current_user_id() !==  '25' ) {
   // to remove only core updates
   remove_action( 'admin_notices', 'update_nag', 3 );  
   // to remove all notifications
   remove_all_filters( 'admin_notices');
   }
}
add_action( 'admin_head', 'expwp_hide_notifications_to_all_but_superadmin_user', 1 );

@davilera
Copy link

No lo he mirado con detalle, pero ¿no sería mejor usar la función remove_all_filters (ver en el Codex) de la acción admin_notices? De esta forma, nos ahorraríamos tener que meter mano a una variable global como $wp_filter...

Y lo mismo con la variable global $user_login: preferiría usar una combinación de get_userdata (Codex) y get_current_user_id (Codex).

@PCianes
Copy link
Author

PCianes commented Jun 29, 2017

Muchas gracias por los comentarios! Acabo de reescribir el código documentado todo como recomendabais pero intentando que el orden y estructura del código, así como que los nombres de las variables y funciones sirvan para entenderlo sin necesidad de más comentarios añadidos.

@PCianes
Copy link
Author

PCianes commented Jun 29, 2017

Gracias David por tu aporte, ciertamente no he usado get_current_user_id para tener mas datos para variaciones con wp_get_current_user , pero ayer al hacer la prueba rápida si que había metido mano a una variable global como la que controla los eventos mediante $wp_filter que siempre es peligroso. ;-)

@PCianes
Copy link
Author

PCianes commented Jun 29, 2017

Genial David! Ya lo he cambiado y me convence mucho más así. ¡gracias por tu ayuda!

@planetahuevo
Copy link

He editado el código de arriba con las modificaciones. :) Gracias!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment