18

From my understanding of how WordPress updates core and plugins is that every 12 hours it goes out and looks for updates. When does that time get set? 12 hours from initial installation? I ask this because using the plugin auto-update filter add_filter( 'auto_update_plugin' ); you could theoretically only allow plugins to update between certain times but if that certain time does not fall into that 12 hour window then plugins will never be updated.

Thus leaving the question in my title which is How would one go about altering how often WordPress looks for updates or how to specify a specific time when to auto-update?

For those interested, here's the filter I've been messing with, checks to see IF it's Monday - Friday 8am - 5pm:

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

Edit As a neat sidenote, it does look like this filter is run each time a plugin updates, multiple plugin updates, multiple runs of the filter

2 Answers 2

12

You are correct, Wordpress checks for updates to core and plugins every 12 hours, but a better way to word it would be: it checks updates if last update was more than 12 hours ago.

The 12 hour setting is hard codded in wp-includes/update.php

The last updated dates are stored in wp_options table and the options are:

_site_transient_update_core
_site_transient_update_plugins
_site_transient_update_themes

Because this check does not happen precisely after 12 hours, but rather next time the condition is met (at least 12 hours has passed) then you will not miss the update.

1
  • Ok, so putting your answer and @Rarst together, every time a condition is met (sounds like every time a page or certain page is viewed) triggers a test to see when updates were checked last, if the check was >= 12 hours then run the auto update. So using the filter, there isn't really a window of opportunity.
    – Howdy_McGee
    Aug 12, 2014 at 21:01
5

The relevant functions wp_update_plugins() and wp_maybe_auto_update() are hooked to the wp-cron events of same name, running on twice daily schedule.

Logically the initial schedule will start to tick from the time of first run. Due to wp-cron implementation (not being real cron and trigered by site visits rather than server clock) it will also "drift" whenever actual wp-cron fires past the time it's due at.

Plugin update checks are also triggered more often in certain admin areas, like plugin list (so that you are less likely to be looking at stale information).

On top of my head I don't quite see elegant way to put it into specific time corridor. Changing schedules are pretty easy, account for drift is not quite.

If this is in any way misison–critical requirement then it might better be handled with real server cron and external tool for actual update, such as wp-cli update functionality or managing plugins via Composer.

2
  • It is not mission critical but is wp-cron only triggered certain admin page views or also normal pageviews? Thanks!
    – Howdy_McGee
    Aug 12, 2014 at 21:05
  • 1
    @Howdy_McGee wp-cron is triggered by pretty much anything (init hook firing)
    – Rarst
    Aug 12, 2014 at 21:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.