Upload
versusbassz
View
3.300
Download
5
Embed Size (px)
DESCRIPTION
Citation preview
Cron APIв WordPress
Владимир Скляр, WordPress Meetup Moscow #25, 26.04.2014
Примеры запланированных задач в реальности:
Повторяющиеся
● Каждый день утром чистим зубы● Каждый будний день идём на работу в 8:00● День рождения и другие праздники● Каждый месяц платим за квартиру
Одиночные
● Концерт популярного артиста● Получение паспорта в 18 лет● Замена лопнувшего колеса автомобиля =)
Примеры запланированных задач в программах:
● Проверка обновлений● Очистка логов● Отправка отчётов по почте● Обновление кеша (например: для внешних запросов)
Запланированные задачи в WordPress:
Одиночные
● Публиция запланированных записей● Отправка пингов
Повторяющиеся
● Проверка обновлений● Плагинов● Тем● Ядра
● Удаление записей из корзины● Удаление автосохранений
Как это работает
/wp-cron.php
Проблемы
Решение (костыль)
Плагин - WP Missed Schedulehttp://wordpress.org/plugins/wp-missed-schedule/
Запуск wp-cron.php извне
//wp-config.php
define('DISABLE_WP_CRON', true);
// crontab -e
*/15 * * * * wget -q -O – "http://example.com/wp-cron.php" > /dev/null 2>&1
0 */1 * * * wget -q -O – "http://example.com/wp-cron.php" > /dev/null 2>&1
0 3 * * * wget -q -O – "http://example.com/wp-cron.php" > /dev/null 2>&1
Включение другого режима работы
//wp-config.php
define('ALTERNATE_WP_CRON', true);
Одиночные задания
wp_schedule_single_event( time() + 3600, “event_name”, array( $arg1, $arg2, $arg3 ) );
function do_this_in_an_hour( $arg1, $arg2, $arg3 ) { // код который выполнится при запуске запланированной задачи}add_action( “event_name”, “do_this_in_an_hour”, 10, 3 );
Повторяющиеся задания
wp_schedule_event( time(), “hourly”, “hook_name” );
add_action( “hook_name”, “my_function” );function my_function () {
// код который выполнится при запуске запланированной задачи}
Интервалы выполнения
Array( [twicedaily] => Array ( [interval] => 43200 [display] => Два раза в день )
[hourly] => Array ( [interval] => 3600 [display] => Каждый час )
[daily] => Array ( [interval] => 86400 [display] => Каждый день )
)
add_filter( “cron_schedules” , “add_custom_cron_intervals” );
function add_custom_cron_intervals ( $intervals ) {
$intervals[“weekly”] = array(“interval” => WEEK_IN_SECONDS,“display” => __( “Once Weekly” , “my-textdomain” ),
);
$intervals[“half_hour”] = array(“interval” => MINUTE_IN_SECONDS * 30,“display” => __( “Every 30 minutes” , “my-textdomain” ),
);
return $intervals;}
Удаление событий
$timestamp = wp_next_scheduled( 'my_schedule_hook' );$original_args = array();
wp_unschedule_event( $timestamp, 'my_schedule_hook', $original_args );
wp_clear_scheduled_hook( 'my_new_event' );
Фильтрыcron_schedulescron_requestschedule_event
/wp-cron.php – скрипт выполняющий запланированные задачи
/wp-includes/cron.php – непосредственно Cron API
КонстантыDISABLE_WP_CRONALTERNATE_WP_CRONWP_CRON_LOCK_TIMEOUTDOING_CRON
Транзитный кешdoing_cron
wp_options → cron –- таблица в БД и название опции содержащей список задач
WordPress Cron API
wp_get_schedules_get_cron_array_set_cron_array
_upgrade_cron_array_get_cron_lockwp_reschedule_event
wp_cronspawn_cron
WordPress Cron API
wp_schedule_eventwp_schedule_single_event
wp_unschedule_eventwp_clear_scheduled_hook
wp_next_scheduledwp_get_schedule
Создание задач
Информация озадачах
Удаление
Служебные Запуск выполнения Интервалы
Структура списка запланированных задач, хранимого в БД
Array( [1398537004] => Array ( [wp_scheduled_delete] => Array ( [40cd750bba9870f18aada2478b24840a] => Array ( [schedule] => daily [args] => Array () [interval] => 86400 ) ) ) [1408985132] => Array ( [publish_future_post] => Array ( [ac7fd96c96bfd48cea1794b86e78b348] => Array ( [schedule] => [args] => Array ( [0] => 140 ) ) ) ))
ПлагиныWP Crontrol - http://wordpress.org/plugins/wp-crontrol/
Debug Bar Cron - http://wordpress.org/plugins/debug-bar-cron/
Полезные ссылкиsmashingmagazine.com - Schedule Events Using WordPress Cron - http://bit.ly/1ehMFev
themefm.com - WordPress Internals: The Cron - http://bit.ly/1kdx1me
Вопросы