日記もTwitterと連動するようになった……はず

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
まあ、自身の勉強を兼ねているとはいえ、しょせんは趣味でやっている個人サイトなので、テスト環境などもないわけで、だから仕組みは作ってみたんですが、未だにテストはしてません。

でもTwitterにつぶやく用のテキストを生成するところまではテストできたから、理論上はちゃんと動く! はずww

この記事が更新されたときに同時にTwitterの方にもつぶやかれれば、オッケーです。テスト用のアカウントとかないので、ぶっつけで行こうと思います。


あかつきのお宿は、日記の間だけWordpressで動いてます。なので、記事の投稿時にTwitterに記事のタイトルやURLを自動でつぶやけるようにするために、プラグインを自作してみました。

特別難しいことはしてません。Wordpressのプラグインを入れるpluginsのフォルダの中に適当なファイルを作って、その中でいつぞやでもやったような処理をやっただけです。



フックという概念

じゃあ早速やってみましょう。いつぞやでもやった処理は申し訳ないけど書くのがめんどいんで、そこは端折っていかせていただきます。

前回と違うところは、アクションフックの設定(っていう言い方でいいんでしょうか?)が必要になるってことです。

Wordpressにはadd_action()というメソッドがあって、そこに必要なフックを渡してやると、何らかのアクション時にこちらがやりたい操作を行わせることができるようになります。言い回しがちょっとあれですが、要はこれで記事の投稿時などにTwitterにリクエストを投げたりすることができるってことですね。

今回は、publish_postというフックを使いました。Wordpressのフックについてはこちらをどうぞ ⇒ アクションフック一覧

publish_postというのは、記事を投稿したり編集したときに発動するフックです。

add_action('publish_post', 'test');

function test() {
    echo 'hello';
    exit;
}

だからこんな風に書いたプラグインを有効にすれば、記事を投稿した際に投稿画面に戻ってはこないで、画面に『hello』が表示された状態になるってことですね。

あ、第二引数は呼び出したい関数名を書くらしいです。

add_action('publish_post', 'tweet');

function tweet() {
    //Twitterにつぶやく処理
    //アクセストークンを取得してAPIを叩け!
}



発動条件を決める

念能力だってレベルの高い技を繰り出そうとしたら発動条件が必要になってきますよね。クロロの盗賊の極意も能力を盗むまでにいくつか手順があったし。

上でも述べたように、このフックは記事を編集した場合にも発動してしまいます。今回の仕様としては、一つの記事をTwitterにつぶやくのは一度でいいので、編集時はできれば発動してほしくない。

制約と誓約が必要になるわけです。より複雑な制約をかけるほど、こちらが望む仕様に近づく。

で、調べてみたんですが、Wordpressで記事をポストしたとき、$_POSTの中を見てみると、『original_post_status』ってのがあるんですよ。管理画面のソースを見てもhiddenでそのパラメータを渡してるのが分かるんですが、どうやらこれが新規投稿時や編集時で値が変わっているっぽい。

具体的に言うと、こんな↓感じ。


新規投稿時 ⇒ auto-draft
編集時 ⇒ publish
記事が下書きの状態で保存されていた場合 ⇒ draft
記事が非公開の状態で保存されていた場合 ⇒ private


主なところはこの4つでしょうか。

編集時は必ずしもpublishになっているわけではなくて、編集している記事が公開の状態だったらpublishになります。一度下書きに戻してから編集したら、このステータスはdraftになっているはずだ。

なので、if文を一つ、制約として設けてやれば解決するんじゃないでしょうか。

function tweet() {
  if($_POST['original_post_status'] != 'publish') {
    //つぶやく
  }
}

本当はこれだと、公開されている記事をいったん下書きの状態に戻してから編集するとつぶやく処理が発動してしまうんですが、まあそれくらいは運用対処でいいです。今回はそこまで難しい制約はいらない。いったん下書きに戻すとか、たぶんしない。



今回はこんな感じでプラグインを作ってみました。僕自身、Wordpressのプラグインを作るのは初めてだったので、感触に慣れとくって意味もあったんですけど、だから処理内容も簡単なものにしてあります。

一応、動くとは思うんだけどなぁ……どうなんだろう。

ま、もしこの記事を公開したときにTwitterにつぶやかれなかったら、そのときは後悔することにします。

そういうわけで、いざツブヤケ! オレー!
 もしかしたら何か関連しているかも? 
 質問や感想などお気軽にコメントしてください