Змініть, як часто WordPress плагін для автоматичного оновлення


17

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

Таким чином, залишаючи питання в моєму заголовку: Як би можна було змінити, як часто WordPress шукає оновлення або як вказати конкретний час, коли потрібно автоматично оновити?

Для тих, хто цікавиться, ось фільтр, з яким я возився, перевіряє, чи не понеділок - п’ятниця 8 ранку - 17 вечора:

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

Редагування Як акуратний сторонній знак, він виглядає так, що цей фільтр запускається щоразу, коли оновлення додатка, кілька оновлень плагінів, кілька запусків фільтра

Відповіді:


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 годин минуло), оновлення не пропустите.


Гаразд, тому поєднання вашої відповіді та @Rarst разом, щоразу, коли умова виконується (звучить як щоразу при перегляді сторінки чи певної сторінки), ініціює тест, щоб побачити, коли оновлення перевірялися останнім часом, якщо перевірка була> = 12 годин, то запустіть автоматичне оновлення. Тож використовуючи фільтр, насправді немає можливості для можливості.
Howdy_McGee

5

Відповідні функції wp_update_plugins()і wp_maybe_auto_update()підключені до однойменної події wp-cron, що працює за графіком двічі на день.

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

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

На моїй голові я не дуже бачу елегантного способу вкласти його в конкретний часовий коридор. Зміна графіків досить проста, облік дрейфу - не зовсім.

Якщо це в будь-якому випадку є критично важливою вимогою, тоді, можливо, краще обробляти справжній серверний крон та зовнішній інструмент для фактичного оновлення, наприклад, функцію оновлення wp-cli або керування плагінами через Composer.


Це не важливо для місії, а wp-cronлише спрацьовує певний перегляд сторінки адміністратора або також звичайний перегляд сторінки? Спасибі!
Howdy_McGee

1
@Howdy_McGee wp-cron спрацьовує майже будь-чим ( init
вистріл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.