黃聰:WordPress Cron 定時任務(轉)


最近我使用 WordPress Cron 定時任務相關功能實現每日一更新的博客訂閱數量更新.

WP Cron 是什么? 是 WordPress 一套定時觸發機制, 可以循環安排任務執行. 如: 定時發布新文章, 定期檢測版本等功能都是通過這個來實現的.

WP Cron 可以為我們實現什么? 我們可以循環更新和提交網站數據, 節日定期向讀者發送賀卡或者表單, ...

 

WordPress 定時任務方法列表可以參考: WP-Cron Functions
WP-Cron 效率不高, 但還是很方便好用的, 整理了一下相關函數的使用方法如下.

wp_get_schedule

通過勾子別名, 獲取預定安排的勾子. 成功時返回循環周期類別 (hourly, twicedaily, daily, ...), 失敗時返回 false.

<?php wp_get_schedule( $hook, $args ) ?>

$hook: 勾子別名
$args: 勾子對應函數的參數數組 (可選)

wp_get_schedules

WordPress 默認支持的循環周期類別有 hourly, twicedaily 和 daily. 通過該函數我們可以獲取所有這些循環周期數組.

<?php wp_get_schedules() ?>

在默認情況下, 由以上方法獲得的數組對象如下.

array(
	'hourly' => array(
		'interval' => 3600,
		'display' => 'Once Hourly'
	),
	'twicedaily' => array(
		'interval' => 43200,
		'display' => 'Twice Daily'
	),
	'daily' => array(
		'interval' => 86400,
		'display' => 'Once Daily'
	)
)

我們可以向 cron_schedules 過濾器添加更多的類型. 添加例子如下:

add_filter('cron_schedules', 'cron_add_weekly'); 
function cron_add_weekly( $schedules )
{
	// Adds once weekly to the existing schedules.
	$schedules['weekly'] = array(
		'interval' => 604800, // 1周 = 60秒 * 60分鍾 * 24小時 * 7天
		'display' => __('Once Weekly')
	);
	return $schedules;
}

wp_next_scheduled

通過勾子別名, 獲取預定安排的下一個運行時刻, 以整型返回. 常用於判斷是否已經做了預定安排.

<?php $timestamp = wp_next_scheduled( $hook, $args ); ?>

$hook: 勾子別名
$args: 勾子對應函數的參數數組 (可選)

wp_schedule_event

按周期循環預定安排一個 WordPress 勾子, 在預定時間觸發勾子對應的函數.

<?php wp_schedule_event($timestamp, $recurrence, $hook, $args); ?>

$timestamp: 時間 (整型)
$recurrence: 循環周期類別 (hourly, twicedaily, daily, ...)
$hook: 勾子別名
$args: 勾子對應函數的參數數組 (可選)

wp_reschedule_event

按周期循環重新預定安排一個 WordPress 勾子. 但我發現這個方法不能正常使用, Codex 寫得很草, 如果哪位清楚知道怎么使用, 請告知一下.

wp_unschedule_event

通過預定時間和勾子別名, 取消預定的安排.

<?php wp_unschedule_event($timestamp, $hook, $args ); ?>

$timestamp: 時間 (整型)
$hook: 勾子別名
$args: 勾子對應函數的參數數組 (可選)

wp_clear_scheduled_hook

通過勾子別名, 移除預定安排的勾子.

<?php wp_clear_scheduled_hook( $hook ); ?>

$hook: 勾子別名

wp_schedule_single_event

預定安排一個 WordPress 勾子, 在預定時間觸發勾子對應的函數. 與 wp_schedule_event 不同的是該方法的只安排一次觸發, 不存在循環預定.

<?php wp_schedule_single_event($timestamp, $hook); ?>

$timestamp: 時間 (整型)
$args: 勾子對應函數的參數數組 (可選)

查看 WordPress 定時任務列表

因為是定時任務, 不能立即生效, 那我們要如何查看這些任務安排呢? 可以裝個插件進行輔助. 我建議使用比較輕量級的 WP-Cron Dashboard (與 Quick Comments 同一個作者), 安裝后可以在 Tool -> WP-Cron 打開控制面板.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM