WP-Twitterが記事の更新時にもツイートするので、記事の公開時だけツイートされるようにした

WP-Twitterは割と良いプラグインなのだけど、ツイートされるタイミングが「記事の公開時及び更新時」ということで、微小な変更に対してもツイートがされてしまう。

なぜこのような挙動になっているのかというと、WordpressのAPIにはフック(hook)というものがあって、特定のイベント時に実行する処理を記述できるのだけど、「記事公開時にだけ起動するフック」というものは提供されていないから。WP-Twitterが利用しているのはpublish_postフックで、これは更新時にも起動してしまう。

とりあえずの回避策として考えたのが、ステータス変更時のフックの利用。例えば、「下書き」状態の記事を「公開」する際のフックは「draft_to_publish」。これを利用すれば、多少冗長になるけれど、「公開時にだけツイート」という処理を実現できる。

具体的なコードは以下。なお、WP-Twitterのバージョンは4.2.2。

      //-------------P1
        // add_action('publish_post', array( $this, 'fdx1_post_now_published') ); // post
        add_action('new_to_publish', array( $this, 'fdx1_post_now_published') );
        add_action('pending_to_publish', array( $this, 'fdx1_post_now_published') );
        add_action('draft_to_publish', array( $this, 'fdx1_post_now_published') );
        add_action('auto-draft_to_publish', array( $this, 'fdx1_post_now_published') );
        add_action('future_to_publish', array( $this, 'fdx1_post_now_published') );

既存の処理(2行目)をコメントアウトして、3行目以降の処理を追加している。やっていることは単純で、新規作成時/レビュー待ち/下書き/自動作成された下書き/予約投稿 のいずれかの状態になっている記事が、公開状態に変わった際にツイートを行う、というもの。雑な感じだけど、とりあえず動いたのでこれで。

プラグインの処理をオーバーライドする、もっといい方法があるなら教えてください。。。

コメントをどうぞ

コメントを残す