Eliminar nags de actualización para no administradores [duplicado]

10

Estoy intentando eliminar u ocultar los nags de actualización para usuarios que no son administradores. Como administrador, veo:

Larespuestapopularquehevistoparamanejarestodicequeusar:

functionhide_update_nag(){if(!current_user_can('update_core')){remove_action('admin_notices','update_nag',3);}}add_action('admin_head','hide_update_nag',1);

Estofuncionabienparaeliminarelprimermensaje(¡WordPress4.5.3estádisponible!Porfavor,actualiceahora),perodejaelsegundovisibleparalosnoadministradores:

Ambosmensajesestánenvueltosenun<divclass="update-nag"> , así que una opción es modificar el fragmento de código anterior para usar CSS para ocultar el problema con:

echo '<style>.update-nag {display: none}</style>';

Pero esto me parece torpe. ¿Hay alguna forma de conectarse a una acción o filtrar y eliminar TODOS los mensajes de actualización de usuarios que no sean administradores? No hay recomendaciones de complementos de terceros, por favor.

    
pregunta j08691 29.06.2016 - 15:59

3 respuestas

14

En el archivo wp-admin/includes/update.php

if ( current_user_can('update_core') )
        $msg = sprintf( __('An automated WordPress update has failed to complete - <a href="%s">please attempt the update again now</a>.'), 'update-core.php' );
    else
        $msg = __('An automated WordPress update has failed to complete! Please notify the site administrator.');

Podemos ver que los mensajes son diferentes según la función del usuario actual y esto es maintenance_nag .

Básicamente tenemos dos nags de actualización y podemos encontrarlos en admin-filters.php

add_action( 'admin_notices', 'update_nag',      3  );
add_action( 'admin_notices', 'maintenance_nag', 10 );

Por lo tanto, para eliminar el segundo mensaje que podemos usar (también verifique la función de usuario actual si desea esto solo para usuarios que no sean administradores)

remove_action( 'admin_notices', 'maintenance_nag', 10 );

Para uso en múltiples sitios

remove_action( 'network_admin_notices', 'maintenance_nag', 10 );
    
respondido por el bravokeyl 29.06.2016 - 16:24
1

@bravokeyl es probablemente la mejor respuesta a tu problema inmediato.

Pero para abordar lo siguiente:

  

¿Hay una manera de enganchar en una acción o filtrar y eliminar TODAS las   ¿Deseas actualizar los mensajes de error para usuarios que no son administradores?

No. Los mensajes Nag en WordPress son solo una devolución de llamada que se agrega al gancho admin_notices que imprime algo de HTML a la página. Son prácticamente lo mismo que los mensajes de error o de éxito, o cualquier otro 'aviso' de WordPress o cualquier otro complemento o tema para el caso.

Ocultar los nags a través de CSS es hacky. También es responsable de algunos falsos positivos, ya que algunos complementos / temas utilizarán, incorrectamente, la clase .update-nag para proporcionar el estilo deseado a sus propios avisos.

Una forma mucho menos complicada es eliminar explícitamente cada devolución de llamada de la que no desea que se impriman avisos (para no administradores). Pero esto se debe a un (probablemente muy bajo costo) de mantener esa lista y garantizar que no haya avisos de que "se deslice la red".

    
respondido por el Stephen Harris 29.06.2016 - 16:35
0

Aquí hay un código completo, que parece funcionar en este momento:

add_action('admin_head', function() {
    if(!current_user_can('manage_options')){
        remove_action( 'admin_notices', 'update_nag',      3  );
        remove_action( 'admin_notices', 'maintenance_nag', 10 );
    }
});
    
respondido por el T.Todua 01.03.2018 - 12:39

Lea otras preguntas en las etiquetas