2015-08-21 75 views
1
register_activation_hook(__FILE__, 'cron_post_activation'); 
add_action('post_event', 'cron_post'); 
function cron_post_activation() { 
    wp_schedule_event(time(), 'hourly', 'post_event'); 
} 

function cron_post() { 
//Do stuff 
} 

這不是默認情況下工作 - 找到困難的方式!Wordpress cron aka時間表?

調試了幾個小時我的幾個帖子聲稱,你需要添加下一行到WP-config.php文件絆倒後:

define('DISABLE_WP_CRON', true); 

1)什麼是背後的邏輯是什麼?禁用某些東西以使其工作對我來說沒有意義。

2)如何設置自己的間隔?文檔指出您只能使用'每小時','雙向'和'每日'。

回答

1

是的,您需要禁用WP_CRON,但是,您還需要在WordPress之外設置自己的cron作業來觸發事件。默認情況下,WP的cron功能只有在有人瀏覽網站時纔會啓動,即使這樣也不能保證它能夠準時運行。如果您需要在特定時間或間隔發生某些事情,它根本沒有用。

假設你是一個* nix的服務器,我對如何做到這一點找到了最好的解釋上是:

http://bitswapping.com/2010/10/using-cron-to-trigger-wp-cron-php/

它的要點是你關閉觸發的WordPress的方式其自己的調度程序,然後直接按照您在服務器上使用cron程序設置的時間表訪問該系統。它所做的是建立一個準系統WP環境,在其中執行任務而不發送任何HTML。如果您的工作設置爲每分鐘訪問一次,這可以比直接ping您的網站主頁帶來更好的性能。

而關於「關閉它使其工作」的觀點 - 是的,這似乎違反直覺。實際上關掉的是檢查是否執行cron任務的系統。通過解決這個問題,你基本上正在建立一個直接通往該系統的渠道,並告訴它每當你告訴它時都要做這項工作。您正在將系統中的差異排除在外。

+0

需要確定的問題:如果我使用「wp_schedule_event」,是否需要禁用它? – AWA

+0

它應該。但是,如果您想在不同於所提供的每小時,每天,每兩小時選項的情況下使用wp_schedule_event()函數,則需要使用'cron_schedules'過濾器設置自定義時間表。你可以在這裏瞭解更多: https://codex.wordpress.org/Plugin_API/Filter_Reference/cron_schedules 如果你不需要計時,並且只是希望在每次cron作業加載站點時運行一些東西,那麼你可以編寫你自己的動作,並讓它在每個負載下執行。 –