SlideShare a Scribd company logo
Cron API
в WordPress
Владимир Скляр, WordPress Meetup Moscow #25, 26.04.2014
Примеры запланированных задач в
реальности:
Повторяющиеся
● Каждый день утром чистим зубы
● Каждый будний день идём на работу в 8:00
● День рождения и другие праздники
● Каждый месяц платим за квартиру
Одиночные
● Концерт популярного артиста
● Получение паспорта в 18 лет
● Замена лопнувшего колеса автомобиля =)
Примеры запланированных задач в
программах:
● Проверка обновлений
● Очистка логов
● Отправка отчётов по почте
● Обновление кеша (например: для внешних запросов)
Запланированные задачи в WordPress:
Одиночные
● Публиция запланированных записей
● Отправка пингов
Повторяющиеся
● Проверка обновлений
● Плагинов
● Тем
● Ядра
● Удаление записей из корзины
● Удаление автосохранений
Как это работает
/wp-cron.php
Проблемы
WordPress Cron API
Решение (костыль)
Плагин - WP Missed Schedule
http://wordpress.org/plugins/wp-missed-schedule/
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
Включение другого режима работы
//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_schedules
cron_request
schedule_event
/wp-cron.php – скрипт выполняющий запланированные задачи
/wp-includes/cron.php – непосредственно Cron API
Константы
DISABLE_WP_CRON
ALTERNATE_WP_CRON
WP_CRON_LOCK_TIMEOUT
DOING_CRON
Транзитный кеш
doing_cron
wp_options → cron –- таблица в БД и название опции содержащей список задач
WordPress Cron API
wp_get_schedules_get_cron_array
_set_cron_array
_upgrade_cron_array
_get_cron_lock
wp_reschedule_event
wp_cron
spawn_cron
WordPress Cron API
wp_schedule_event
wp_schedule_single_event
wp_unschedule_event
wp_clear_scheduled_hook
wp_next_scheduled
wp_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/
WordPress Cron API
Полезные ссылки
smashingmagazine.com - Schedule Events Using WordPress Cron - http://bit.ly/1ehMFev
themefm.com - WordPress Internals: The Cron - http://bit.ly/1kdx1me
Вопросы

More Related Content

PPTX
I tmozg js_school
PDF
Present saint-per3-by-pavel-vlasov
PPTX
Парсер: что? зачем? как?
PDF
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
PDF
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
PPTX
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
PPTX
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
PDF
Perl – жив?!
I tmozg js_school
Present saint-per3-by-pavel-vlasov
Парсер: что? зачем? как?
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Perl – жив?!

What's hot (20)

ZIP
Cocos2d-x и Lua
PDF
Алексей Распопов "Будущее асинхронного программирования в ECMAScript"
PPTX
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
PDF
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
PDF
Что API Карт забыл на сервере — Антон Корзунов
PDF
GAE - плюсы/минусы/подводные камни
PDF
Почему Mojolicious?
PDF
Пластилиновый код: как перестать кодить и начать жить
PPTX
DSLs in Lisp and Clojure
PDF
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
PDF
Web Internship - PHP and MySQL
PDF
Devcamp nodejs-2010
PPT
Web осень 2012 лекция 4
PDF
10 - Web-технологии. MVC фреймворки (продолжение)
PDF
Debug php apps with xdebug in PHPstorm
PPTX
Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты.
PDF
Making Scalable JavaScript Application
PDF
Модули на C для Ruby
Cocos2d-x и Lua
Алексей Распопов "Будущее асинхронного программирования в ECMAScript"
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
Что API Карт забыл на сервере — Антон Корзунов
GAE - плюсы/минусы/подводные камни
Почему Mojolicious?
Пластилиновый код: как перестать кодить и начать жить
DSLs in Lisp and Clojure
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
Web Internship - PHP and MySQL
Devcamp nodejs-2010
Web осень 2012 лекция 4
10 - Web-технологии. MVC фреймворки (продолжение)
Debug php apps with xdebug in PHPstorm
Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты.
Making Scalable JavaScript Application
Модули на C для Ruby
Ad

Similar to WordPress Cron API (20)

PDF
Wordpress Cron
PPT
PHP Tricks
PPT
Yserver
PDF
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
PPTX
Web осень 2013 лекция 5
PDF
Everything You Need to Know About WP_Query, WordCamp Russia 2014
PPTX
PowerShell
PDF
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
PDF
JPoint 2016 - Etudes of DIY Java profiler
PDF
Инструментируй это
PPTX
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
PPTX
Взломать Web-сайт на ASP.NET? Сложно, но можно!
PPT
Javascript
PDF
Erlang tasty & useful stuff
PPTX
Tdd webpack + testem + mocha + chai
PPTX
Зачем нужна Scala?
PDF
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
PDF
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
PPTX
DBMC_JOBS.pptx mongoosemongoosemongoosemongoosemongoose
PPT
Easy authcache 2 кэширование для pro. Родионов Игорь
Wordpress Cron
PHP Tricks
Yserver
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
Web осень 2013 лекция 5
Everything You Need to Know About WP_Query, WordCamp Russia 2014
PowerShell
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
JPoint 2016 - Etudes of DIY Java profiler
Инструментируй это
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Javascript
Erlang tasty & useful stuff
Tdd webpack + testem + mocha + chai
Зачем нужна Scala?
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DBMC_JOBS.pptx mongoosemongoosemongoosemongoosemongoose
Easy authcache 2 кэширование для pro. Родионов Игорь
Ad

More from versusbassz (6)

PDF
Premium-темы WordPress (Wordcamp Russia 2015)
PDF
Вёрстка по методологии БЭМ
PDF
Premium-темы WordPress
PDF
Корневая директория WordPress
PDF
Кратко о WordPress
PDF
Advanced Custom Fields
Premium-темы WordPress (Wordcamp Russia 2015)
Вёрстка по методологии БЭМ
Premium-темы WordPress
Корневая директория WordPress
Кратко о WordPress
Advanced Custom Fields

WordPress Cron API