利用 Hook 處理 WordPress 錯失排程(Missed Schedule)的幾種解法
在維護眾多 WordPress 網站,終於換我碰到這個問題了,一般我寫文實在太懶又太少,所以自己根本不會碰到錯失排程的問題
通常寫 WordPress 如果你很常使用文章排程設定發布時間,那你或許碰過這樣的問題,但你只是排程一天一篇,或許根本不會發現問題、也覺得沒關係
不過….你的網站是很多人一起寫不同文章,而且都要排程的情況下,大概就會機率碰到這個問題
注意!我舉例的方式是不修改系統代碼、不用主機指令以及外掛的方式去的
我也可以先說…前兩種方式我測試其實沒有成功
不知道是不是系統還是外掛影響的關係?
而第三種方式是我自己寫的
如果有發現任何問題,請告訴我哦!
第一種 讓系統進行備用排程檢查
* 開啟 wp-config.php
* 於 WP_DEBUG define 下方加入代碼
代碼:
1 2 3 4 | /* 檔案: /wp-config.php */ define('ALTERNATE_WP_CRON', true); |
第二種 修改排程 request timeout
* 開啟(子)佈景的 functions.php 或客製檔案執行區
* 在最下方或是指定地方加入以下代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /* 檔案: /wp-content/themes/(子)佈景/functions.php */ function achang_cron_debug( $cron_request_array ) { if( isset($cron_request_array['args']) ){ $cron_request_array['args']['timeout'] = 5; } return $cron_request_array; } add_filter( 'cron_request', 'achang_cron_debug', 10 ); |
第三種 檢查排程文章時間並發佈
* 開啟(子)佈景的 functions.php 或客製檔案執行區
* 在最下方或是指定地方加入以下代碼
代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /* 檔案: /wp-content/themes/(子)佈景/functions.php */ function achang_missed_posts() { global $pagenow; // $pagenow == edit.php 是後台文章列表 // is_front_page 是首頁 // is_single 是文章內頁 if( 'edit.php' == $pagenow || is_front_page() || is_single() ) { global $wpdb; // 取得現在 GTM+0 的時間 (不會被時區影響) $check_time = current_time('mysql', 1); // 取得所有排程時間小於現在時間的排程文章 $future_posts = $wpdb->get_results("SELECT ID FROM `{$wpdb->posts}` WHERE `post_status`='future' AND `post_date_gmt` < '{$check_time}'"); if( $future_posts ) { foreach( $future_posts as $_post ) { // 發表文章 wp_publish_post($_post->ID); } } } } // 前端 <head> 時觸發 add_action('wp_head', 'achang_missed_posts'); // 後端觸發 add_action('admin_init', 'achang_missed_posts'); |
臉書留言
一般留言