とあるブログで週間単位くらいで連載ものの記事を書いているのですが、投稿の曜日を定期的にしておけば読者の方にも優しいと思って、cron か何かで投稿できるようにしようと考えていたのですが、WordPress には、予約投稿(未来投稿)なる機能があると書いてあったので、これは使わない手はないなと思って試してみました。
使い方は簡単で、記事の投稿画面のタイムスタンプを未来に設定すればよいと書かれていたので、早速タイムスタンプを未来に設定して、記事を投稿。
ざっと調べた感じの予想(注:あくまで予想です)では公開はされているけど、表示の処理が走る時にフィルタをかけて未来のものを表示されないようにしてるっぽい。そうなると、ping は記事投稿時に飛んでしまうのでは?とか、RSSはどうなるの?とかの疑問があったけど、その辺はあまり気にしなくてもいいやってことでそのまま投稿。
しかし、設定されたタイムスタンプの時刻は過ぎているのに一向に表示されない。おかしい。。
よくよく、詳しく調べてみると、 WordPress 2.1 は、予約投稿の処理の方法が違うらしく、wp-cron と言うのがキーワードとして出てきて、このwp-cron で cron の処理を走らせてるみたいなことが書かれてたので、そのソースをざっと追ってみると、以下のような感じでした。(注:あくまでざっとなので動作確認はしてません)
未来に行うイベントを DB にキャッシュさせておいて、外部からアクセスがあったときに wp-cron が現在時刻と DB のイベント発生時刻とを照らし合わせて、設定時刻が過ぎていたら設定されたイベントを実行。で、気になっていた ping の件も、これならイベントが走るまで飛ばないっぽいです。
で、疑問点である予約投稿が表示されなかった件とは関係くないようで未解決なのですが、DB を確認したところでは、どうも、イベントがキャッシュがされていなかったために処理が走らなかった様子です。
根拠は、[options] テーブルの [cron] にイベントらしきものが入っていないのと、同じく [options] テーブルの [doing_cron] に設定された値が 0 のままなので、cron が実行されたことはいまだかつてないってことではないかと思うのです。たぶん、cron が実行されていたら [doing_cron] は、処理が走った time が入るんではないかと予想。
となると、ステータスが公開ではなかったから?でも、草稿のところには表示されないし、管理画面のステータスは公開になっていた気がするんですが。(その記事は既に手動で投稿してしまったので、確認するすべなし。)
気になるのは、記事投稿時にテキストボックスの下にある『公開』ボタンを押して投稿したのですが、右側にあるメニューの『投稿ステータス』の公開にチェックを入れておかないといけないような処理っぽかったので、この投稿で試してみます。
注:この記事はタイムスタンプを 2007/04/28/19:00 に設定し、2007/04/28/ 18:50 に投稿しました。
追記:テスト後
無事に未来投稿(予約投稿)されていました。
上に書かれていたことで、嘘情報がありました。[options] テーブルの [cron] が全て実行されたあとは、[doing_cron] に設定された値は 0 になるようです。[doing_cron] は、前回のイベントをチェックした際に一定期間内(たぶん30秒)は、イベントのチェックをしないようにするフラグみたいです。