Ändern Sie, wie oft WordPress Auto-Updates Plugins

17

Nach meinem Verständnis, wie WordPress Core und Plugins aktualisiert, wird alle 12 Stunden nach Updates gesucht. Wann wird diese Zeit eingestellt? 12 Stunden nach der Erstinstallation? Ich frage dies, weil Sie mit dem Plugin-Auto-Update-Filter add_filter( 'auto_update_plugin' );theoretisch nur zulassen können, dass Plugins zwischen bestimmten Zeiten aktualisiert werden. Wenn diese bestimmte Zeit jedoch nicht in dieses 12-Stunden-Fenster fällt, werden Plugins niemals aktualisiert.

So bleibt die Frage in meinem Titel: Wie würde man ändern, wie oft WordPress nach Updates sucht oder wie man einen bestimmten Zeitpunkt für die automatische Aktualisierung angibt?

Für Interessierte, hier ist der Filter, mit dem ich mich beschäftigt habe. Prüft, ob Montag - Freitag 8 - 17 Uhr ist:

function maybe_update_plugins(){
    date_default_timezone_set('Your Timezone Here');
    $localAssoc = localtime(time(), true);
    $update = false;

    /***
    /* tm_wday[0] = Sunday
    /* tm_wday[6] = Saturday
    ***/
    if(
      $localAssoc['tm_wday'] > 0 && $localAssoc['tm_wday'] < 6 &&
      $localAssoc['tm_hour'] > 7 && $localAssoc['tm_hour'] < 17
    ){
        $update = true;
    }

    return $update;
}
add_filter( 'auto_update_plugin', 'maybe_update_plugins' );

Bearbeiten Als nette Randnotiz sieht es so aus, als würde dieser Filter jedes Mal ausgeführt, wenn ein Plugin aktualisiert wird, wenn mehrere Plugins aktualisiert werden oder wenn der Filter mehrmals ausgeführt wird

Howdy_McGee
quelle

Antworten:

10

Sie haben Recht, Wordpress sucht alle 12 Stunden nach Updates für Core und Plugins. Besser ausgedrückt: Es überprüft Updates, wenn das letzte Update mehr als 12 Stunden zurückliegt.

Die 12-Stunden-Einstellung ist fest programmiert wp-includes/update.php

Die zuletzt aktualisierten Daten werden in der wp_optionsTabelle gespeichert. Folgende Optionen sind verfügbar:

_site_transient_update_core
_site_transient_update_plugins
_site_transient_update_themes

Da diese Prüfung nicht geschieht genau nach 12 Stunden, sondern beim nächsten Mal die Bedingung erfüllt ist (mindestens 12 Stunden vergangen ist), dann wird das Update nicht verpassen.

LevanK
quelle
Wenn Sie also Ihre Antwort und @Rarst zusammenfassen, wird jedes Mal, wenn eine Bedingung erfüllt ist (dies hört sich an, als würde jedes Mal eine Seite oder eine bestimmte Seite angezeigt), ein Test ausgelöst, um festzustellen, wann die Aktualisierungen zuletzt überprüft wurden, wenn die Überprüfung> = 12 Stunden war Führen Sie das automatische Update aus. Wenn Sie also den Filter verwenden, gibt es kein wirkliches Zeitfenster.
Howdy_McGee
5

Die relevanten Funktionen wp_update_plugins()und wp_maybe_auto_update()sind mit den gleichnamigen wp-cron-Ereignissen verknüpft, die zweimal täglich ausgeführt werden.

Logischerweise beginnt der anfängliche Zeitplan ab dem Zeitpunkt des ersten Durchlaufs zu kreuzen. Aufgrund der Implementierung von wp-cron (das nicht wirklich cron ist und eher durch Site-Besuche als durch die Server-Uhr ausgelöst wird) "driftet" es auch immer dann, wenn tatsächlich wp-cron nach Ablauf der geplanten Zeit ausgelöst wird.

Plugin-Aktualisierungsprüfungen werden auch in bestimmten Administrationsbereichen wie der Plugin-Liste häufiger ausgelöst (damit Sie weniger wahrscheinlich veraltete Informationen anzeigen).

Auf meinem Kopf sehe ich keine elegante Möglichkeit, es in einen bestimmten Zeitkorridor zu stellen. Das Ändern von Zeitplänen ist ziemlich einfach, die Berücksichtigung von Abweichungen ist nicht ganz.

Wenn dies in irgendeiner Weise eine missionskritische Anforderung ist, kann dies besser mit einem echten Server-Cron und einem externen Tool für die eigentliche Aktualisierung, wie z. B. der wp-cli-Aktualisierungsfunktionalität oder der Verwaltung von Plugins über Composer, erledigt werden.

Rarst
quelle
Es ist nicht geschäftskritisch, sondern wird wp-cronnur bestimmte Admin-Seitenaufrufe oder auch normale Seitenaufrufe ausgelöst? Vielen Dank!
Howdy_McGee
1
@ Howdy_McGee wp-cron wird durch so ziemlich alles ausgelöst ( initHook
Firing