web-dev-qa-db-fra.com

Empêcher la mise à jour d'un plugin

J'ai apporté des modifications personnalisées à un plugin. Lorsque nous obtenons notification de la mise à niveau officielle de ce plug-in dans WP, un développeur doit effectuer la mise à niveau manuellement, car les fichiers modifiés doivent être intégrés à la nouvelle version.

Nous ne voulons pas qu'un membre du personnel clique accidentellement sur le bouton de mise à niveau de ce plug-in en effectuant une série de mises à niveau.

Cependant, nous souhaitons toujours voir la notification de mise à niveau afin qu'un développeur puisse planifier la mise à jour. Donc, augmenter le numéro de version dans l'en-tête à une valeur très élevée n'est pas une solution, car cela bloque cette visibilité.

Comment puis-je empêcher WP de pouvoir effectuer la mise à niveau et que le plug-in soit toujours valide?

6
eComEvo

Tout d'abord ... C'est une très mauvaise idée de modifier un plugin existant.

Mais si vous devez vraiment faire cela, alors vous pouvez masquer le lien de mise à jour avec ce code (celui-ci fonctionne pour Yoast SEO):

function remove_update_notification_link($value) {
    if ( array_key_exists('wordpress-seo/wp-seo.php', $value->response) ) {
        $value->response[ 'wordpress-seo/wp-seo.php' ]->package = '';
    }
    return $value;
}
add_filter('site_transient_update_plugins', 'remove_update_notification_link');

L'avis sera affiché, mais au lieu du lien à mettre à jour, il y aura l'information suivante: "La mise à jour automatique n'est pas disponible pour ce plugin."

Si vous mettez ce code directement dans le plugin, vous pouvez utiliser une méthode plus automatique:

function remove_update_notification_link($value) {
    if ( array_key_exists(plugin_basename(__FILE__), $value->response) ) {
        $value->response[ plugin_basename(__FILE__) ]->package = '';
    }

    return $value;
} 
add_filter('site_transient_update_plugins', 'remove_update_notification_link');
1

Dans le fichier functions.php du thème actif, ajoutez ces lignes

function filter_plugin_updates( $value ) {
    unset( $value->response['path_to_plugin/plugin_name.php'] ); // one plugin by line
}

add_filter( 'site_transient_update_plugins', 'filter_plugin_updates' );

Ceci cachera complètement l'exigence de mise à jour. Vous devrez vérifier si une mise à jour est disponible en commentant le code.

1
Core972

La réponse de @ Core92 est correcte, sauf que cela émet un avertissement lors de l'activation/désactivation d'autres plugins:

function filter_plugin_updates( $value ) {
    $toAvoid='path_to_plugin/plugin_name.php';
    if( isset( $value->response[$toAvoid]) )
        unset( $value->response[$toAvoid] );
    return $value;
}
add_filter( 'site_transient_update_plugins', 'filter_plugin_updates' );
1
Andrea Somovigo