суббота, 20 августа 2011 г.

Циклическое выполнение Wordpress плагина

Присралось мне поиграть с похапе и вордпрессом.
Итак задумка, выполнять плагин циклически раз в Х секунд.
Проблема: блог чухнется проверять нужно ли выполнять запланированное задание только в случае если кто-то зашел к вам в блог. Затем смотрится пора ли уже выполнять плагин или нет. Стандартный крон wordpress будет вам ебать мозг - это я гарантирую.
Описание проблемы нашел тут.

Если коротко, то решить проблему можно добавив строку ниже в файл wp-config.php вашего блога рядом с другими define.
define('ALTERNATE_WP_CRON', true);

Актуально для Wordpress до версии 3.2.1
Сам код в плагине после стандартной шапки с описанием будет выглядеть так:

register_activation_hook(__FILE__, 'savcron_activate');
register_deactivation_hook(__FILE__, 'savcron_deactivate');
add_action('savcron_event', 'savcron_hourly');

add_filter('cron_schedules', 'savcron_update_sched');

function savcron_activate() {
if (!wp_next_scheduled('savcron_event')) {
wp_schedule_event(time(), 'onehour', 'savcron_event');
}
}

function savcron_deactivate() {
wp_clear_scheduled_hook('savcron_event');
}

function savcron_hourly() {
// вызываем функцию Action2 которая содержит основное тело плагина
action2();

}

// 60 сек * 60 мин = 3600сек = 1 час
// Можно вписать в интервал любое количество секунд ничего не меняя
function savcron_update_sched( $schedules ) {
$schedules['onehour'] = array(
'interval' => 3600,
'display' => 'onehour');
return $schedules;
}

Комментариев нет:

Отправить комментарий