web-dev-qa-db-fra.com

Comment désactiver les notifications de mise à jour du tableau de bord pour les abonnés?

Pour les utilisateurs enregistrés sur mon blog, s'ils cliquent sur le tableau de bord, ils reçoivent une alerte leur suggérant qu'ils avertissent l'administrateur du site (moi) que la nouvelle version de WordPress est disponible.

Tout ce que je veux, c'est cacher les alertes du tableau de bord aux abonnés. Où puis-je trouver le code pour changer cela?

J'ai trouvé un site ici qui suggère que je cherche le code:

add_action('admin_head','addDashboardAlert');

Mais je ne sais pas où chercher.

METTRE À JOUR

J'ai trouvé un code plus pertinent pour rendre les alertes conditionnelles au rôle de l'utilisateur, ici :

if (!current_user_can('delete_posts')) {
2
bozdoz

vous pouvez inclure des css personnalisés dans votre functions.php qui cache l'élément update_nag (notifications) en fonction de la capacité de l'utilisateur:

add_action('admin_head','admin_css');
function admin_css()
{
if(!current_user_can('administrator'))//not and admin
{
    echo '<style>';
        echo '.update_nag{display:none}';
        echo '</style>';
    }
}
2
Clearmedia

Updating cette réponse, le code original ci-dessous va supprimer l'écran nag mais il enverra une requête ping au serveur pour obtenir des mises à jour à chaque chargement, grâce à @ El Yobo, voir la mise à jour ci-dessous.

Cela désactivera les mises à jour principales et l'écran de rappel à tout le monde, sauf aux superadmins.

add_action( 'after_setup_theme', 'remove_core_updates' );
function remove_core_updates()
{
    if ( ! current_user_can( 'update_core' ) ) {
        return;
    }
    add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
    add_filter( 'pre_option_update_core', '__return_null' );
    add_filter( 'pre_site_transient_update_core', '__return_null' ); 
}  

Pour désactiver toutes les notifications de plugin;

remove_action( 'load-update-core.php', 'wp_update_plugins' );
add_filter( 'pre_site_transient_update_plugins', '__return_null' );

Pour supprimer un plugin spécifique, vous pouvez essayer ceci mais cela ne fonctionnera pas à 100% en fonction du plugin;

function ya_remove_plugin_update($value) {
     $plugin_relative_path = "plugin_relative_path"; // change this to your plugin
     unset( $value->response[ $plugin_relative_path ] );
     return $value;
}
add_filter( 'site_transient_update_plugins', 'ya_remove_plugin_update' );

Mis à jour

Ceci désactive complètement les mises à jour (je ne parviens pas à le faire fonctionner en fonction des rôles d’utilisateur)ETcessent de faire un ping pour les mises à jour (Un avertissement PHP ne sera pas sûr, mais il ne sait pas comment résoudre ce problème sans modification. coeur).

function remove_core_updates(){

        global $wp_version;
        return (object) array(
            'last_checked' => time(),
            'version_checked' => $wp_version,
            );
}
add_filter('pre_site_transient_update_core', 'remove_core_updates');
add_filter('pre_site_transient_update_plugins', 'remove_core_updates');
add_filter('pre_site_transient_update_themes', 'remove_core_updates');
9
Wyck

Je n'ai pas réussi à utiliser les scripts ci-dessus, j'ai donc cherché un peu plus et j'ai trouvé ceci:

//Remove update notifications from sub-users
add_action('admin_head','admin_css');
function admin_css()
{
if( current_user_can('YOUR_SELECTED_ROLE'))//Choose the correct role where you need to block update nag
{
add_filter( 'pre_site_transient_update_core', create_function( '$a', "return null;" ) );
}
}
1
Horacsio

À partir de la réponse de @ wyck, tous les avis de mise à jour et les avertissements PHP sont maintenant masqués à l'aide du script ci-dessous. Il suffit de placer ceci dans votre functions.php

function remove_core_updates() {
  global $wp_version;
  return (object) array(
    'last_checked' => time(),
    'version_checked' => $wp_version,
  );
}
add_filter('pre_site_transient_update_core', 'remove_core_updates');
add_filter('pre_site_transient_update_plugins', 'remove_core_updates');
add_filter('pre_site_transient_update_themes', 'remove_core_updates');


function remove_menu() {
  global $submenu;
  if (isset($submenu['index.php'][10]))
    unset($submenu['index.php'][10]); // Removes 'Updates'.
}
add_action('admin_menu', 'remove_menu');
0
Ricky Boyce