Tout savoir sur WordPress
Tutoriel WordPress

Supprimer les notifications de mise à jour pour certains plugins

Lorsqu’un client vous demande de modifier le code source d’un plugin WordPress, il serait judicieux d’empêcher la mise à jour du plugin pour ne pas écraser les modifications.

Il peut arriver qu’un client vous demande de modifier un plugin. Dans ce cas précis, il faudrait empêcher la mise à jour du plugin pour ne pas écraser vos modifications !

Mais voilà, WordPress est bien fait : il annonce les mises à jour à l’aide d’une notification. Il est possible de supprimer toutes les notifications, non seulement des plugins, mais aussi du code et des thèmes. Vous trouverez un plugin capable de faire ça : Update Notifications Manager. Dans mon cas, je souhaite que le client puisse mettre à jour les autres plugins ! J’en ai juste 2 qu’il ne faut pas toucher.

Copier le code ci-dessous dans le fichier functions.php présent à la racine de votre thème :

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


if( is_admin() ):
function baw_pre_set_site_transient_update_plugins( $value ) {
	
    // Tableau des plugins qui sont interdits de mise à jour
    // Ajoutez son chemin (dossier) et le fichier contenant l'entête du plugin (Plugin Name:)
    $forbidden_updates = array( 'baw-manual-related-posts/bawmrp.php', 'baw-post-views-count/bawpvc.php' );
	
    foreach( $forbidden_updates as $plugin )
	// ... et je vérifie que mon plugin fait partie de la "response" envoyée
	if( !empty( $value->response ) && array_key_exists( $plugin, $value->response ) )
	    // Dans ce cas, je supprime l'entrée de mon plugin de cet objet "$value"
	    unset( $value->response[$plugin] );
    
    // Et on le renvoie dans tous les cas
    return $value;
}
add_filter('pre_set_site_transient_update_plugins', 'baw_pre_set_site_transient_update_plugins' );
endif;

[/pastacode]

J’utilise le hook pre_set_site_transient_ sur le transient update_plugins afin de modifier sa valeur avant la mise en base de données.

Cet article a été mis à jour il y a 4299 jours - Il n'est peut être plus à jour !

Article écrit par Julio P.

Fondateur de SecuPress, l’extension de sécurité WordPress, Julio Potier est un Expert WordPress, un Formateur Expérimenté et un Consultant en Sécurité Web.

Il aime partager ses compétences et ses réflexions sur WordPress, donnant des conférences partout dans le monde.

12 Commentaires

  1. Cool, on m’a justement posé la question récemment :)

    Thx

    PS : c’est pas toi qui te moquais des noms de fonction à rallonge il n’y a pas si longtemps ? huhuhu ^^

  2. merci,
    si j’avais su ca un journée plus tôt ..j’ai du renommer le dossier du plugin et modifier l’entete du .php … :p

  3. oui je suis tout a fait d’accord, et je ne recommande pas cette ‘solution’.
    la documentation WordPress est bien faite concernant ses fonctions, en revanche c’est la galère pour trouver le bon hook quand on en a besoin !

  4. Ta solution fonctionne aussi mais “dégrade” le plugin. Je connais une autre personne – message subliminal : screenfeed – qui passe la version du plugin a “1000” pour être certain d’etre toujours faussement à jour. Alors oui ça marche aussi, mais le client ou la personne qui fait la maintenance ne connais pas la véritable version en place.

    • bonjour, merci pour cet article. Comme évoqué en commentaire, je préfère la solution de changement de version. Mais pour garder une trace de la version utilisée, je remplace par exemple version : 1.2.3 par version : 10001.2.3

  5. Au début aussi j’ai galéré mais ça fait un bout de temps que je trouve le hook assez rapidement, il ne faut pas regarder la doc, mais plutot directement dans le core ou sur wpseek.com par mot clé. Voilà ma technique ;)

  6. Merci pour cet astuce.
    Un autre cas de figure où l’on ne veut pas upgrader un plugin:
    tout simplement envie de conserver une version antérieure tout simplement
    du fait que les nouveautés de ce plugin ne nous conviennent pas.

    Thanks.

  7. Bonjour Julio, j’ai bien suivi ton tuto pour exclure la mise à jour de plugin, en loccurence The events calendar dans mon cas.
    Peux tu me dire si j’ai bien fait?
    Merci par avance.

    if( is_admin() ):
    function the-events-calendar_pre_set_site_transient_update_plugins( $value ) {

    // Tableau des plugins qui sont interdits de mise à jour
    // Ajoutez son chemin (dossier) et le fichier contenant l’entête du plugin (Plugin Name:)
    $forbidden_updates = array( ‘the-events-calendar/the-events-calendar.php’ );

    foreach( $forbidden_updates as $plugin )
    // … et je vérifie que mon plugin fait partie de la “response” envoyée
    if( !empty( $value->response ) && array_key_exists( $plugin, $value->response ) )
    // Dans ce cas, je supprime l’entrée de mon plugin de cet objet “$value”
    unset( $value->response[$plugin] );

    // Et on le renvoie dans tous les cas
    return $value;
    }
    add_filter(‘the-events-calendar_pre_set_site_transient_update_plugins’ );
    endif;