Zmień, jak często WordPress Auto-Updates Plugins

17

Z mojego zrozumienia, w jaki sposób WordPress aktualizuje rdzeń i wtyczki, wychodzi to, że co 12 godzin wychodzi i szuka aktualizacji. Kiedy ustawia się ten czas? 12 godzin od pierwszej instalacji? Pytam o to, ponieważ przy użyciu filtra automatycznej aktualizacji add_filter( 'auto_update_plugin' );wtyczek teoretycznie można zezwolić tylko na aktualizację wtyczek między określonymi czasami, ale jeśli ten określony czas nie mieści się w tym 12-godzinnym oknie, wtyczki nigdy nie będą aktualizowane.

W ten sposób zostawiam pytanie w moim tytule, które brzmi: Jak można zmienić częstotliwość, z jaką WordPress szuka aktualizacji lub jak określić konkretny czas automatycznej aktualizacji?

Dla zainteresowanych, oto filtr, z którym zadzieram, sprawdza, czy JEŚLI jest poniedziałek - piątek w godzinach 8:00 - 17:00:

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' );

Edytuj Jako czysty sidenote, wygląda na to, że ten filtr jest uruchamiany za każdym razem, gdy aktualizacja wtyczki, wiele aktualizacji wtyczek, wiele uruchomień filtra

Howdy_McGee
źródło

Odpowiedzi:

10

Masz rację, Wordpress sprawdza aktualizacje rdzenia i wtyczek co 12 godzin, ale lepiej to powiedzieć: sprawdza aktualizacje, jeśli ostatnia aktualizacja była więcej niż 12 godzin temu.

Ustawienie 12 godzin jest na stałe zakodowane wp-includes/update.php

Ostatnie zaktualizowane daty są przechowywane w wp_optionstabeli, a dostępne opcje to:

_site_transient_update_core
_site_transient_update_plugins
_site_transient_update_themes

Ponieważ sprawdzenie to nie nastąpi dokładnie po 12 godzinach, ale raczej następnym razem, gdy warunek zostanie spełniony (minęło co najmniej 12 godzin), nie przegapisz aktualizacji.

LevanK
źródło
Ok, więc zebranie odpowiedzi i @Rarst razem, za każdym razem, gdy spełniony jest warunek (brzmi jak za każdym razem, gdy strona lub określona strona jest wyświetlana) uruchamia test sprawdzający, kiedy aktualizacje były sprawdzane jako ostatnie, jeśli sprawdzenie było> = 12 godzin uruchom automatyczną aktualizację. Więc używając filtra, nie ma tak naprawdę szansy.
Howdy_McGee
5

Odpowiednie funkcje wp_update_plugins()i wp_maybe_auto_update()są uzależnione od zdarzeń wp-cron o tej samej nazwie, uruchamianych według harmonogramu dwa razy dziennie.

Logicznie, początkowy harmonogram zacznie tykać od momentu pierwszego uruchomienia. Ze względu na implementację wp-cron (nie będącą prawdziwym cronem i uruchamianym przez wizyty w witrynie, a nie zegar serwera), będzie również „dryfował” za każdym razem, gdy faktyczny wp-cron wystrzeli po czasie, w którym powinien.

Sprawdzanie aktualizacji wtyczek jest również uruchamiane częściej w niektórych obszarach administracyjnych, takich jak lista wtyczek (dzięki czemu rzadziej patrzysz na nieaktualne informacje).

Nad głową nie widzę eleganckiego sposobu na umieszczenie go w określonym korytarzu czasowym. Zmiana harmonogramów jest dość łatwa, rozliczenie dryfu nie jest do końca.

Jeśli jest to w jakikolwiek sposób wymaganie krytyczne dla mizisonów, lepiej byłoby obsłużyć go za pomocą prawdziwego crona serwera i zewnętrznego narzędzia do faktycznej aktualizacji, takiego jak funkcja aktualizacji wp-cli lub zarządzanie wtyczkami przez Composer.

Rarst
źródło
Nie jest krytyczny dla misji, ale wp-cronwywoływane są tylko niektóre wyświetlenia strony administratora lub zwykłe odsłony? Dzięki!
Howdy_McGee
1
@Howdy_McGee wp-cron jest uruchamiany przez prawie wszystko ( initwystrzeliwanie haka)
Rarst