web-dev-qa-db-fra.com

Désactiver WP mises à jour de base, mais envoi d'une notification par courrier électronique

Existe-t-il un moyen de désactiver WP les mises à jour principales, mais d'envoyer un courrier électronique de notification indiquant que WP mise à jour est disponible pour l'installation? Je sais que le courrier électronique de notification concernant la mise à jour de WP est envoyé après le moment où WP a été mis à jour et comment le désactiver (mise à jour principale et notifications).

J'essaie d'utiliser le code ci-dessous:

function core_update_notification(){
    global $wp_version;

   $core_update = wp_version_check();

   if ($core_update != NULL || $core_update !=FALSE){
      $to = "[email protected]";
      $subject = "WP update is available!";
      $message = "You have WP update ready to install";
      $headers = 'From: My Website <[email protected]>' . "\r\n";

      wp_mail( $to, $subject, $message, $headers );
   }

}

   add_action( 'init', 'core_update_notification' );
   add_filter( 'auto_update_core', '__return_false' );

mais d'une certaine manière, cette idée ne fonctionne pas comme prévu.

UPDATE # 1 On dirait que wp_version_check () effectue le contrôle de version, puis définit le transitoire update_core s'il existe une nouvelle version. Il ne retourne rien de valeur, c'est pourquoi le code ci-dessus échoue. Besoin d'utiliser get_site_transient('update_core') et le code mis à jour ressemble à

function core_update_notification(){
   global $wp_version;

   $installed_version = $wp_version;

   $uc_transient = get_site_transient('update_core');
   if ( empty($uc_transient->updates) ) return;
   $updates = $uc_transient->updates;
   $current_version = $updates[0]->current;

   if (version_compare($installed_version, $current_version, "<")) {
      $to = "[email protected]";
      $subject = "WP update is available!";
      $message = "You have WP update ready to install";
      $headers = 'From: My Website <[email protected]>' . "\r\n";

      wp_mail( $to, $subject, $message, $headers );
   }

}

   add_action( 'init', 'core_update_notification' );
   add_filter( 'auto_update_core', '__return_false' );

mais de toute façon un email n'est pas envoyé

6
JackTheKnife

Il semble qu'après le changement de code pour vérifier get_site_transient('update_core') j'ai ce dont j'ai besoin, mais l'action doit être exécutée avec une priorité appropriée ou un crochet (pensées/suggestions?). Code de travail ci-dessous:

function core_update_notification(){
   global $wp_version;

   $installed_version = $wp_version;

   $uc_transient = get_site_transient('update_core');
   if ( empty($uc_transient->updates) ) return;
   $updates = $uc_transient->updates;
   $current_version = $updates[0]->current;

   if (version_compare($installed_version, $current_version, "<")) {
      $to = "[email protected]";
      $subject = "WP update is available!";
      $message = "You have WP update ready to install";
      $headers = 'From: My Website <[email protected]>' . "\r\n";

      wp_mail( $to, $subject, $message, $headers );
   }

}

   add_action( 'init', 'core_update_notification' );
   add_filter( 'auto_update_core', '__return_false' );

Je pense que la meilleure solution sera d’utiliser quotidiennement wp_schedule_event dans ce cas, en procédant comme suit: https://codex.wordpress.org/Function_Reference/wp_schedule_event

3
JackTheKnife