投稿

WordPressから自動でtwitterにつぶやく

Gianismには便利な関数がいくつかあり、その一つが gianism_update_twitter_status() です。これはtwitterに投稿をすることができます。

基本的な使い方

Gianismでtwitter連携を有効にしている場合、他のSNSアカウントと異なり、連携に使用したアカウントのコンシューマーシークレットがすでに取得済みです。したがって、このアカウントでつぶやくことが可能です。

話を分かりやすくするために、Gianism.infoを例にあげましょう。このサイトと連携しているtwitterアカウントはwpGianismです。

つまり、あなたのWordPressはサイトのアイデンティティを代表するようなtwitterアカウントにつぶやかせることができるわけです。

投稿を公開した時につぶやく

さて、簡単な例として、「投稿を公開するとつぶやく」という例を考えて見ましょう。どのように利用するかはともかく、重要なのは「どこにフックをかけるか」です。今回使えそうなのは、投稿のステータスが変化したときに実行されるtransition_post_statusです。次のようなコードで実現できます。

<?php
add_action( 'transition_post_status', function( $new_status, $old_status, $post ){
  if ( ( 'publish' == $new_status ) && ( 'publish' != $old_status ) ) {
    $txt = '新しい投稿を公開しました > ' . get_the_title( $post ) . ' ' . get_permalink( $post );
    gianism_update_twitter_status( $txt );
  }
}, 10, 3 );

ただし、「投稿を公開したらシェアする」という機能自体はJetpackにも存在しているので、ある程度のオリジナリティを出さないのであれば、そちらを使った方が楽です。コードを書く必要もありません。

ここではJetpackにもできる「文字を挿入」という シンプルな例を超えた、もう少しジェネリックな例に挑戦して見ましょう。今回は通算10作品目の時には、記念すべき投稿を行なったということで盛大に祝福する関数 celebrate_author($post) を定義しましょう。

<?php

function celebrate_author( $post = null ) {
  $post = get_post( $post );
  $query = new WP_Query( [
    'post_type'      => 'post',
    'post_status'    => 'publish',
      'author'         => $post->post_author,
      'posts_per_page' => 1,
  ] );
  if ( 10 == $query->found_posts ) {
    // ちょうど10件だったら
    return sprintf(
      'おめでとうございます! %1$sさんが記念すべき10件目の投稿をしました %2$s',
      get_the_author_meta( 'display_name', $post->post_author ),
      get_permalink( $post )
    );
  } else {
    return '';
  }
}

この関数を上記の例と組み合わせれば、Jetpackよりは少し良さそうですね。より対話的にすれば、あなたのユーザーから面白いと思ってもらえるかもしれません。

複雑な条件でつぶやくべき理由

簡略化のため、「以前のステータスが公開でなく、新しいステータスが公開だったら」という条件にしていますが、実際はもっと複雑な条件を設定すべきです。

たとえば、誰でも投稿できるサイトを作ったとしましょう。その場合、「投稿のステータスが公開になったときつぶやく」という単純なルールにしてしまうと、めざといユーザーは「公開に変更するとつぶやいてもらえる」ということに気づき、同じ投稿のステータスを何度も変更するかもしれません。

そのようなハックを防ぐ意味でも、実際の運用では複雑な条件にすることをおすすめします。一度でも公開になった場合、その日時を投稿メタに保存しておいて、2回目以降は無視するというのが賢い選択でしょう。

自動的かつ定期的につぶやく

WordPressにはCron機能があります。この機能を利用することで、「定期的につぶやく」ということが可能です。

たとえば、毎時間ごとに動作するCronは次のようになります。Codexにも詳細なドキュメントがありますので、ご覧ください。

<?php

add_action( 'init', function() {
  // イベントが登録されていなかったら、登録
  if ( ! wp_next_scheduled( 'my_daily_cron' ) ) {
    wp_schedule_event( current_time( 'timestamp', true ), 'hourly', 'my_daily_cron' );
  }
} );

// 上で登録したイベントにフックをかける
add_action( 'my_daily_cron', function() {
  // なにかする
} );

さて、問題は「なにをつぶやくか」です。

同じような内容を毎時間つぶやき続けるtwitterアカウントをあなたはフォローしたいと思いますか? いやですよね。

また、twitterのAPIには「同一の内容を連続でつぶやくとエラーになる」という仕様がありますので、もしあなたが積極的にtwitterアカウントを利用していない場合、定期つぶやきはすべてエラーになります。

それに上述した通り、毎回違う内容をつぶやくのでなければ、自動ツイートサービスが存在しますので、そちらを使った方が楽です。

今回は2つの例を紹介しましょう。

この記事は登録済みユーザー専用です。残り58%のコンテンツを読むためには、ログインしてください。

目次