Modifica la frequenza con cui i plugin di aggiornamento automatico di WordPress


17

Dalla mia comprensione di come WordPress aggiorna core e plugin è che ogni 12 ore esce e cerca aggiornamenti. Quando viene impostato quel tempo? 12 ore dall'installazione iniziale? Lo chiedo perché, utilizzando il filtro di aggiornamento automatico del plug-in, in add_filter( 'auto_update_plugin' );teoria è possibile consentire l'aggiornamento dei plug-in solo in determinati periodi, ma se tale intervallo di tempo non rientra in quella finestra di 12 ore, i plug-in non verranno mai aggiornati.

Quindi lasciando la domanda nel mio titolo, che è: come fare per modificare la frequenza con cui WordPress cerca gli aggiornamenti o come specificare un momento specifico in cui eseguire l'aggiornamento automatico?

Per chi è interessato, ecco il filtro con cui ho sbagliato, controlla se è lunedì - venerdì 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' );

Modifica Come un sidenote pulito, sembra che questo filtro venga eseguito ogni volta che un plug-in si aggiorna, più aggiornamenti di plug-in, più esecuzioni del filtro

Risposte:


10

Hai ragione, Wordpress controlla gli aggiornamenti per core e plugin ogni 12 ore, ma un modo migliore per esprimerlo sarebbe: controlla gli aggiornamenti se l'ultimo aggiornamento è stato più di 12 ore fa.

L'impostazione delle 12 ore è codificata wp-includes/update.php

Le ultime date aggiornate sono memorizzate nella wp_optionstabella e le opzioni sono:

_site_transient_update_core
_site_transient_update_plugins
_site_transient_update_themes

Poiché questo controllo non si verifica esattamente dopo 12 ore, ma piuttosto la prossima volta che viene soddisfatta la condizione (almeno 12 ore) non perderai l'aggiornamento.


Ok, quindi mettendo insieme la tua risposta e @Rarst, ogni volta che viene soddisfatta una condizione (sembra ogni volta che viene visualizzata una pagina o una determinata pagina) innesca un test per vedere quando gli aggiornamenti sono stati controllati per ultimi, se il controllo era> = 12 ore quindi eseguire l'aggiornamento automatico. Quindi, usando il filtro, non c'è davvero una finestra di opportunità.
Howdy_McGee

5

Le funzioni pertinenti wp_update_plugins()e wp_maybe_auto_update()sono agganciate agli eventi wp-cron con lo stesso nome, in esecuzione su una pianificazione due volte al giorno.

Logicamente la pianificazione iniziale inizierà a spuntare dal momento della prima esecuzione. A causa dell'implementazione di wp-cron (non essendo vero cron e trigerato dalle visite al sito piuttosto che dall'orologio del server) si "sposterà" ogni volta che il wp-cron effettivo si spegne oltre il tempo previsto.

I controlli di aggiornamento dei plug-in vengono inoltre attivati ​​più spesso in alcune aree di amministrazione, come l'elenco dei plug-in (in modo da avere meno probabilità di vedere informazioni non aggiornate).

In cima alla mia testa non vedo del tutto un modo elegante per inserirlo in un corridoio temporale specifico. La modifica dei programmi è piuttosto semplice, l'account per la deriva non è del tutto.

Se questo è in qualche modo un requisito critico per un errore, potrebbe essere meglio gestito con cron server reale e strumento esterno per l'aggiornamento effettivo, come la funzionalità di aggiornamento di wp-cli o la gestione di plug-in tramite Composer.


Non è mission-critical ma vengono wp-cronattivate solo determinate visualizzazioni di pagina di amministrazione o anche normali visualizzazioni di pagina? Grazie!
Howdy_McGee

1
@Howdy_McGee wp-cron è attivato praticamente da qualsiasi cosa ( inithook hook)
Rarst
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.