更新した記事をTwitterに通知しているそこのアナタ、たぶんdlvr.itとかIFTTTとか使っているんじゃないでしょうか?
僕も使ってました。ちょっと前まで。ほんの少し前まで。
でも、もうやめました。というのもやっぱりラグが気になるんですよ。ほとんどのサービスがRSSフィードを取得してからTwitterに投稿する仕様になっているので、記事がRSSフィードに流れるまでの待ち時間、サービスがRSSフィードを取得するまでの待ち時間、これが積み重なると結構なラグになります。
あと、ニュース系のサイトだと記事を投稿した直後に通知して30分後や1時間後に再度、通知したいことってあると思うんです。Twitterのタイムラインの性質上目にとまらない事がほとんどですからね。それを実現するためにdlvr.itを使っていたんですが、RSSフィードを取得する時間の影響か、通知時間もバラバラになっちゃうんですよね。
30分後に通知したかったのにたった5分後に通知されてしまったりね・・・「おい、こいつこんな短時間で何回も通知してくんじゃねーよ・・・」って思われてたらどうしようとか考えちゃいます。
ということで、記事を投稿したらすぐにTwitterに通知できて(もちろんサムネイル付きで)、30分後に再通知デキるコードを載せておきます。
▼記事の公開時に呼び出される
// 記事公開時のフック add_action( 'transition_post_status', 'rollout_post', 10, 3 ); // 予約投稿時のフック add_action('publish_future_post', 'rollout_post', 10, 3); function rollout_post ( $new_status, $old_status, $post ) { $rag_time = 30;// ここを変更すると再通知する時間を変えられる。分単位 // 既に公開済みの記事は通知しない if ( $new_status != 'publish' ) { return; } // まだ公開してない記事のみを公開 switch($old_status){ case 'draft': case 'pending': case 'auto-draft': post_tweet( $post->ID, "【ブログ更新】" ); $args = array ( "id" => $post->ID ); wp_schedule_single_event(time() + 60 * $rag_time, 'postcron', array( $args )); break; } }
▼Twitterに再通知する時に呼び出される
// 再通知処理 add_action( 'postcron', 'tweetcron', 1, 1 ); function tweetcron ( $args ) { post_tweet( $args["id"], '【ちょっと前に更新したエントリー】' ); }
▼Twitterに投稿するやつ
// 更新通知をTwitterに投稿 function post_tweet ( $tweet_post_id, $head ) { // tmhOAuthの読み込み locate_template( array( 'tmhOAuth.php' ), true, true ); // URLを取得 $tweet_info["url"] = get_permalink($tweet_post_id); // タイトルを取得 $tweet_info["title"] = get_the_title($tweet_post_id); // サムネイルを取得 if ( has_post_thumbnail( $tweet_post_id ) ) { $post_thumbnail_id = get_post_thumbnail_id($tweet_post_id); $tweet_info["thumbnail"] = wp_get_attachment_image_src($post_thumbnail_id, 'full'); $tweet_info["thumbnail"] = $tweet_info["thumbnail"][0]; $tweet_info["thumbnail_image"] = file_get_contents($tweet_info["thumbnail"]); $tweet_info["thumbnail_size"] = getimagesize($tweet_info["thumbnail"]); } else { $tweet_info["thumbnail"] = ※サムネイルが設定されていない場合の画像URL; $tweet_info["thumbnail_image"] = file_get_contents($tweet_info["thumbnail"]); $tweet_info["thumbnail_size"] = getimagesize($tweet_info["thumbnail"]); } // Twitterに投稿するメッセージを生成 $message = $head.$tweet_info["title"].' '.$tweet_info["url"]; // Twitterに投稿するためのトークンやキーを設定 $login_info = array( 'consumer_key' => ※Consumer Key, // 事前にhttps://apps.twitter.com/で取得しておく 'consumer_secret' => ※Consumer Secret, // 事前にhttps://apps.twitter.com/で取得しておく 'user_token' => ※Access Token, // 事前にhttps://apps.twitter.com/で取得しておく 'user_secret' => ※Access Token Secret, // 事前にhttps://apps.twitter.com/で取得しておく 'curl_ssl_verifypeer' => false ); // Twitterに投稿するメッセージとサムネイルを設定 $tweet = array ( 'media[]' => $tweet_info["thumbnail_image"]. ";type=" . $tweet_info["thumbnail_size"]['mime'] . ";filename=" . basename( $tweet_info["thumbnail"] ), 'status' => $message ); // Twitterに投稿 $tmhOAuth = new tmhOAuth( $login_info ); $code = $tmhOAuth->request( 'POST', 'https://api.twitter.com/1.1/statuses/update_with_media.json', $tweet, true, true ); }
Twitterに投稿するコアな部分はtmhOAuthっていうライブラリを使用するので、tmhOAuth.phpをこちらからダウンロードしてWordPressのテーマファイルにぶっこんで上のコードと下のコードをfunctions.phpに書き込めばOK