如何在 WordPress 裡固定間隔時間執行特定工作?

如果想要在 WordPress 裡想要固定間隔時間執行工作,大概分成幾個步驟。首先你要先建立你想要固定執行時間的「間隔」,接下來要建立一個執行工作排程的勾子 (action hook),最後只要將你想要執行的工作使用 add_action 方法加到這個排程勾子即可。

為了簡化整個作業流程,我們建議安裝 WP Crontrol 這個外掛來快速完成過程的幾個步驟,可以幫你省下許多撰寫程式的時間和複雜度。

第一步:建立「間隔」

前往「設定 > Cron Schedules」,你可以自行新增想要的固定間時間隔和名稱,下面是一個每月間隔的範例,當中 2629800 為一個月的秒數。

當然如果你發現 WordPress 內建的間隔有你需要的,你可以直接取用,就不需要自己額外新增了。目前 WordPress 內建有支援的間隔為以下幾個:

  1. hourly 每小時一次 (3600秒)
  2. twicedaily 每天兩次 (43200秒)
  3. daily 每天一次 (86400秒)
  4. weekly 每週一次 (604800秒)

第二步:建立勾子 action hook

接下來前往「工具 > Cron Events > Add New」來建立鉤子。

選擇 Standard cron event 後,輸入勾子的名稱,並且選擇下一次執行勾子的時間以及重複執行的間隔,你可以挑選你在上ㄧ步建立好的間隔。

這邊的範例我將 hook 名稱定為 my_custom_interval_cron_hook 並且設定下一次執行為 2023/07/01 的 00:00:00 以及每月執行一次。

第三步:將方法掛到勾子

這步驟你可以將你準備好固定要執行的方法放在佈景主題的 functions.php 或是使用程式碼片段之類的外掛將方法插入到系統裡。

我們定義好一個方法名稱為 my_custom_interval_cron_hook_handler 並且透過 add_action 加入到我們上一步建立好的 my_custom_interval_cron_hook 勾子裡。

這邊是一個固定執行 update_option 的範例

add_action( 'my_custom_interval_cron_hook', 'my_custom_interval_cron_hook_handler' );

function my_custom_interval_cron_hook_handler() {
  update_option(''my_custom_interval_cron_hook_time", time());
}

最後一步:驗證

你可以前往「工具 > Cron Events」尋找你前幾步操作的鉤子與方法,是否有正確的被註冊到 WordPress 系統裡,並且查看下一次預計的執行時間。