web-dev-qa-db-fra.com

Supprimer les mises à jour pour les non-administrateurs

J'essaie de supprimer ou de masquer les remarques de mise à jour pour les utilisateurs non-administrateurs. En tant qu'administrateur, je vois:

 enter image description here 

La réponse populaire que j'ai vue pour gérer cela dit d'utiliser:

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

Cela fonctionne bien pour supprimer le premier message (WordPress 4.5.3 est disponible! Veuillez mettre à jour maintenant), mais laisse le deuxième visible aux non-administrateurs:

 enter image description here 

Les deux messages sont encapsulés dans un <div class="update-nag">, de sorte que une option consiste à modifier le bloc de code ci-dessus pour utiliser CSS afin de masquer le problème avec:

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

Mais cela me semble compliqué. Existe-t-il un moyen de s’associer à une action ou à un filtre et de supprimer TOUS les messages de mise à jour de mise à jour destinés aux utilisateurs non-administrateurs? Aucune recommandation de plug-in tiers s'il vous plaît.

12
j08691

Dans le fichier 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.');

Nous pouvons voir que les messages sont différents en fonction du rôle d'utilisateur actuel et qu'il s'agit de maintenance_nag.

En gros, nous avons deux alarmes de mise à jour et on peut les trouver dans admin-filters.php

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

Donc, pour supprimer le deuxième message que nous pouvons utiliser (vérifiez également le rôle de l'utilisateur actuel si vous le souhaitez uniquement pour les non administrateurs

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

Pour une utilisation multi-site

remove_action( 'network_admin_notices', 'maintenance_nag', 10 );
16
bravokeyl

voici le code complet, qui semble fonctionner en ce moment:

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 );
    }
});
2
T.Todua

@bravokeyl est probablement la meilleure solution à votre problème immédiat.

Mais pour aborder les points suivants:

Existe-t-il un moyen de s’associer à une action ou à un filtre et de supprimer TOUS les messages de mise à jour de mise à jour destinés aux utilisateurs non-administrateurs?

Les messages Nag dans WordPress ne sont que des rappels à ajouter au crochet admin_notices qui imprime du code HTML sur la page. Ils sont pratiquement identiques aux messages d'erreur ou de succès, ou à tout autre "avis" de WordPress ou de tout autre plug-in ou thème.

Cacher les remarques via CSS est hacky. Il est également sujet à des faux positifs car certains plugins/thèmes utiliseront, à tort, la classe .update-nag pour fournir le style souhaité à leurs propres notifications.

Une méthode beaucoup moins astucieuse consiste à supprimer explicitement chaque rappel pour lequel vous ne souhaitez pas imprimer les avis (pour les non-administrateurs). Mais cela revient à un coût (probablement très faible) de maintenir cette liste et de s’assurer qu’il n’y a pas de préavis qui "glisse sur le net".

1
Stephen Harris