質問: Wordpressで記事投稿直後にバックグラウンドで処理を行いたいのですが、 どうやら wp_schedule_single_event がきちんとトリガーされていないようです。 以下のコードのどこが間違っているか、ご指摘頂ければ幸いです! ``` // functions.php add_action('save_post', 'registerMyCron'); function registerMyCron(){ wp_schedule_single_event(time(), 'myCronAction'); } add_action('myCronAction', 'doSomething'); function doSomething(){ // 何らかの処理... } ```
回答: WordPress Codex では `wp_schedule_single_event()` について次のように書かれています。 > > 指定した時刻に WordPress のコア機能によって一度だけ実行されるフック(アクション)を登録します。そのアクションは誰かが WordPress サイトを訪れたときに予定した時刻を過ぎていれば実行されます。 > > > ですから、現在時刻+n秒と指定したところでその時間に実行される保証はないですし、現在時刻を指定したらすぐさま実行されるわけではありません。 `spawn_cron()` 関数を呼ぶことですぐにスケジュールの確認と実行が行われるようなので、これを呼び出すと直ちに実行できるのではないでしょうか。 ``` function registerMyCron(){ wp_schedule_single_event(time(), 'myCronAction'); spawn_cron(); } ``` 私自身はWordPressに詳しくないので、この方法が適切なのかどうかはわかりませんが...。 参考 WordPressプラグインの重い処理をバックグランドで非同期に実行する方法 | ゆっくりと...