ここ2年ほどPC向けアプリケーションの開発にどっぷり入り込んでいて、久々にHTMLの世界へ戻ってきたので、今回はまだまだ元気なWordPressネタを紹介したいと思います。
僕が最後にWordPressをちゃんと触っていたのがWordPress 2.6ぐらいだったと思うので、もう5年以上前なんですね。
当時はまだPHPも4.xだったり、色々と苦労した記憶があります。
今回のお題はタイトルのとおり、「cronを使わずに定期処理をする」です。
もちろんググれば色々と情報は出てくると思うのですが、僕のなかでしっくりこなかったり、サンプルが動かなかったりしていたので、改めてここでまとめを書いてみたいと思います。
最近、実際にプロジェクトで経験したのですが、
などの要望があるときには、今回の方法がもってこいです。
管理画面にアクセスするとプラグインやWordPress本体のアップデート通知が表示されますが、まさにそのロジックと同じ処理、と思ってもらえれば分かりやすいかと。
導入が長くなりましたが、実際にサンプルを作っていきたいと思います。
themesの中のfunctions.phpでも出来るのですが、今回は汎用的に使えるように"プラグイン化"してみましょう。
プラグイン化するので、まずは下準備として、プラグインのベースを作ります。
/wp-content/plugins/ の中に好きな名前のフォルダを作り、その中にプラグインの実行ファイルとなるphpファイルを作成します。
例えば /wp-content/plugins/md-blog_cron.php のように配置します。
ここからファイルに記述していくのですが、結論だけ欲しい人もいると思いますので、まずはソース全文を。
/** * Plugin Name: md-blog_cron * Plugin URI: プラグインのURL * Description:プラグインの説明 * Version: 1.0.0 * Author: monsterdive, inc. * Author URI: http://monster-dive.com/ */ /** * set function */ add_action('MD_BlogCronHook','MD_BlogDo'); /** * wp-cron start */ function MD_BlogCronStart() { //do twice per day wp_schedule_event(time(),'twicedaily','MD_BlogCronHook'); } register_activation_hook(__FILE__, 'MD_BlogCronStart'); /** * wp-cron stop */ function MD_BlogCronStop() { wp_clear_scheduled_hook('MD_BlogCronHook'); } register_deactivation_hook(__FILE__, 'MD_BlogCronStop'); /** * execute function */ function MD_BlogDo(){ //実際に処理する内容を書く }
ソースの中に書いてあるコメントの通り、そのままなのですが、
簡単ですね。
以上ざっくりにでしたが、定期的に処理するプラグインを作ってみました。
いかがでしょうか。
簡単なわりには、重宝するのではないかなと思います。
フロントエンジニアからすれば、サーバエンジニアに作業をお願いしなくていい!ですし。w
またプラグインをOFFにすれば、フロントサイドで定期処理を止められるというのもメリットかと思います。
注意点としては、cronと違い正確な時間指定ではなく、あくまでWebサイトへのアクセスのタイミングで実行されたかどうかを確認する処理、ということです。
例えば上記のように1日2回で設定していても、誰もサイトを見る人がいなければ処理は行われません。
サイトを見る人がいないのだから、処理も要らないよね?という思想でしょうか。
ただ、次にサイトにアクセスがあったタイミングで、1日2回の処理がされてない!ということで、すぐに処理が行われます。
ちなみに、開発中のテストには、プラグインを無効/有効化を繰り返すだけでカウントはリセットされるようなので、すぐに処理されますよ。