WordPress Cron API

Preview:

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

Вопросы