-
-
Save PCianes/bd3148ee2c01fe4a542f3e46b56c139b to your computer and use it in GitHub Desktop.
<?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); | |
Eyyy genial! pero podrías poner la extensión en .php para que coloree la sintaxis? Gracias :D
Ups! Todavía no sé cómo funciona esto ;-)
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...
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 );
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).
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.
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. ;-)
Genial David! Ya lo he cambiado y me convence mucho más así. ¡gracias por tu ayuda!
He editado el código de arriba con las modificaciones. :) Gracias!
1- Función para crear avisos en panel administración.
2- Función para quitar todos los avisos excepto a un administrador concreto.