WooCommerce Action Schedule 自動化作業

上個月紀錄過如何使用單次排程來執行任務,也就是只會在特定時間執行一次,但在自動化作業的前提下,重複執行的定期排程會是比較常用到的情境,也就是每分鐘、每小時甚至是每天的固定時間執行。

使用 Action Schedule 註冊定期排程的方法為 as_schedule_recurring_action,該方法帶有五個參數,常用的是前三個:$timestamp 開始時間、$interval_in_seconds 以秒數計算的執行間隔,以及 $hook 勾點名稱。

假設我要在每天晚上的凌晨十二點執行,首先要抓到當日凌晨十二點的 timestamp 也就是時間戳記,這個戳記指的是今天現在這個時間點距離 1970/01/01 00:00:00 的秒數,在 PHP 中可以用 strtotime() 來算出這個數字。’

strtotime() 可以用語意化的方式來算出時間戳記,如果是要取得當日凌晨十二點,那就是寫成 strtotime(‘today midnight‘),如果是要明天凌晨十二點,寫成 strtotime(‘tommorow midnight’) ,或是也可以直接指定時間:strtotime(‘00:00:00’)

需要注意的是時間戳記預設的時區是 GMT+0,也就是格林威治時間,在台灣的話是 GMT+8 快八小時,因此如果你是想要用台灣時間來執行排程,就需要把時間戳記減去八小時的秒數,也就是 strtotime(‘00:00:00’) - 8*3600,才會是台灣時間的凌晨十二點。

第二個參數是 $interval_in_seconds,代表的是每次執行期間相隔的秒數,在 WordPress 裡面有幾個秒數相關的常數可運用:

MINUTE_IN_SECONDS:一分鐘的秒數,等於 60 秒

HOUR_IN_SECONDS:一小時的秒數,等於 60 * 60 = 3600 秒

DAY_IN_SECONDS:一天的秒數,等於 24 * 60 * 60 = 86400 秒

WEEK_IN_SECONDS:一週的秒數,等於 7 * 24 * 60 * 60 = 604800 秒

MONTH_IN_SECONDS:一個月的秒數,等於 30 * 24 * 60 * 60 = 2592000 秒

YEAR_IN_SECONDS:一年的秒數,等於 365 * 24 * 60 * 60 = 31536000 秒

如果要每天執行的話就使用 DAY_IN_SECONDS,如果是要每十分鐘的話就用 10 x MINUTE_IN_SECONDS,每三小時五十分鐘就用 3 x HOUR_IN_SECONDS + 50 x MINUTE_IN_SECONDS

第三個參數是排程的名稱,另外要注意的是我們要確保這個定期排程只會註冊一次,所以在註冊前先用 as_next_scheduled_aciton 傳入排程名稱來檢查,避免跟其他同名的排程衝突。

完整程式碼如下:

<?php

/**
 * 註冊定期排程
 */
add_aciton(
	'init',
	function() {
		if ( ! as_next_scheduled_action( 'my_cron_name' ) ) {
			as_schedule_recurring_action( strtotime( '00:00:00' ) - 8 * 3600, DAY_IN_SECONDS, 'my_cron_name' );
		}
	}
);
/**
 * 執行排程事件
 */
add_action(
	'my_cron_name',
	function() {
		// do something.
	}
);
文章標籤cron

目錄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

賴俊吾 / Oberon Lai
賴俊吾 / Oberon Lai

現為全職 WordPress 工程師,網站開發經歷 11 年,專攻前端工程與 WordPress 佈景主題、外掛客製化開發

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!

專注於分享 WordPress 開發、接案技巧、專案管理等自由工作者必備知識與心得

© 2024 想點創意科技有限公司

想點創意科技有限公司 | 統一編號 90516823
Designed by Hend Design | 隱私權政策

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!