22
Cron API в WordPress Владимир Скляр, WordPress Meetup Moscow #25, 26.04.2014

WordPress Cron API

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: WordPress Cron API

Cron APIв WordPress

Владимир Скляр, WordPress Meetup Moscow #25, 26.04.2014

Page 2: WordPress Cron API

Примеры запланированных задач в реальности:

Повторяющиеся

● Каждый день утром чистим зубы● Каждый будний день идём на работу в 8:00● День рождения и другие праздники● Каждый месяц платим за квартиру

Одиночные

● Концерт популярного артиста● Получение паспорта в 18 лет● Замена лопнувшего колеса автомобиля =)

Page 3: WordPress Cron API

Примеры запланированных задач в программах:

● Проверка обновлений● Очистка логов● Отправка отчётов по почте● Обновление кеша (например: для внешних запросов)

Page 4: WordPress Cron API

Запланированные задачи в WordPress:

Одиночные

● Публиция запланированных записей● Отправка пингов

Повторяющиеся

● Проверка обновлений● Плагинов● Тем● Ядра

● Удаление записей из корзины● Удаление автосохранений

Page 5: WordPress Cron API

Как это работает

/wp-cron.php

Page 6: WordPress Cron API

Проблемы

Page 7: WordPress Cron API
Page 8: WordPress Cron API

Решение (костыль)

Плагин - WP Missed Schedulehttp://wordpress.org/plugins/wp-missed-schedule/

Page 9: WordPress Cron API
Page 10: WordPress Cron API

Запуск 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

Page 11: WordPress Cron API

Включение другого режима работы

//wp-config.php

define('ALTERNATE_WP_CRON', true);

Page 12: WordPress Cron API

Одиночные задания

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

Page 13: WordPress Cron API

Повторяющиеся задания

wp_schedule_event( time(), “hourly”, “hook_name” );

add_action( “hook_name”, “my_function” );function my_function () {

// код который выполнится при запуске запланированной задачи}

Page 14: WordPress Cron API

Интервалы выполнения

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;}

Page 15: WordPress Cron API

Удаление событий

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

Page 16: WordPress Cron API

Фильтры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

Page 17: 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

Создание задач

Информация озадачах

Удаление

Служебные Запуск выполнения Интервалы

Page 18: WordPress Cron API

Структура списка запланированных задач, хранимого в БД

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

Page 19: WordPress Cron API

ПлагиныWP Crontrol - http://wordpress.org/plugins/wp-crontrol/

Debug Bar Cron - http://wordpress.org/plugins/debug-bar-cron/

Page 20: WordPress Cron API
Page 21: WordPress Cron API

Полезные ссылкиsmashingmagazine.com - Schedule Events Using WordPress Cron - http://bit.ly/1ehMFev

themefm.com - WordPress Internals: The Cron - http://bit.ly/1kdx1me

Page 22: WordPress Cron API

Вопросы