Изменить частоту плагинов для автоматического обновления WordPress

17

Насколько я понимаю, как WordPress обновляет ядро ​​и плагины, так это то, что каждые 12 часов он выходит и ищет обновления. Когда это время будет установлено? 12 часов с начальной установки? Я спрашиваю об этом, потому что с помощью фильтра автообновления add_filter( 'auto_update_plugin' );плагинов теоретически можно разрешить плагин обновляться только между определенными периодами, но если это определенное время не попадает в это 12-часовое окно, тогда плагины никогда не будут обновляться.

Таким образом, оставив вопрос в моем заголовке, который гласит: Как можно изменить частоту, с которой WordPress ищет обновления, или указать конкретное время автоматического обновления?

Для тех, кто заинтересован, вот фильтр, с которым я связывался, проверяет, если это понедельник - пятница с 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' );

Редактировать Как аккуратный sidenote, похоже, что этот фильтр запускается каждый раз, когда обновляется плагин, несколько обновлений плагина, несколько запусков фильтра.

Howdy_McGee
источник

Ответы:

10

Вы правы, Wordpress проверяет наличие обновлений для ядра и плагинов каждые 12 часов, но лучший способ выразить это: проверять обновления, если последнее обновление было более 12 часов назад.

12-часовая настройка жестко задана в wp-includes/update.php

Последние обновленные даты хранятся в wp_optionsтаблице и имеют следующие параметры:

_site_transient_update_core
_site_transient_update_plugins
_site_transient_update_themes

Поскольку эта проверка не происходит точно через 12 часов, а в следующий раз, когда условие выполнено (прошло не менее 12 часов), вы не пропустите обновление.

LevanK
источник
Итак, соединяя ваш ответ и @Rarst вместе, каждый раз, когда выполняется условие (звучит как каждый раз, когда страница или определенная страница просматривается) запускает тест, чтобы увидеть, когда обновления проверялись в последний раз, если проверка была> = 12 часов, то запустить автообновление. Таким образом, используя фильтр, на самом деле нет возможности.
Howdy_McGee
5

Соответствующие функции wp_update_plugins()и wp_maybe_auto_update()привязаны к событиям wp-cron с одинаковыми именами, работающими дважды в день по расписанию.

По логике начальное расписание начнет отсчитываться со времени первого запуска. Из-за реализации wp-cron (не являющейся настоящим cron и инициируемой посещениями сайта, а не часами сервера), он также будет «дрейфовать» всякий раз, когда фактический wp-cron срабатывает после времени, в которое он должен был работать.

Проверки обновления плагинов также чаще запускаются в определенных областях администрирования, таких как список плагинов (так что вы с меньшей вероятностью будете искать устаревшую информацию).

Сверху головы я не вижу элегантного способа поместить его в определенный временной коридор. Менять графики довольно просто, учесть дрифт не совсем.

Если это каким-либо образом является критически важным требованием, то лучше всего справиться с реальным сервером cron и внешним инструментом для актуального обновления, такого как функция обновления wp-cli или управление плагинами через Composer.

Rarst
источник
Это не имеет решающего значения, но wp-cronзапускается только при определенных просмотрах страниц администратора или при обычном просмотре страниц? Благодарность!
Howdy_McGee
1
@Howdy_McGee wp-cron запускается практически чем угодно ( initвыстрел крюка)
Rarst