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.
12 Commentaires
Merci Julio pour cette astuce ! J’en avais justement besoin pour un client.
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 ^^
J’ai fait pire ici : http://wordpress.org/extend/plugins/baw-moderator-role/faq/ mais comme personne ne lit les FAQ, personne n’a rien vu x)
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
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 !
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
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 ;)
un troll averti en vaut 2
ça sent le troll ici >_>
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.
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;