先日Twitter APIへのHTTP接続が廃止された影響でTweet Old Postが動作しなくなった場合の対処法という記事でTweet Old Postのカスタマイズ方法を紹介しました。
「過去記事をランダムに抽出してツイートする」というシンプルな処理なだけに、管理者としては「本文やタイトルじゃなくてカスタムフィールドを含めたい」とか、「この投稿タイプの中でこのタクソノミーを持つ投稿だけをツイートしたい」とか、色々と要望が出てくる処理ではないかと思います。
そこで過去記事をランダムにツイートする処理をTweet Old Postのようなプラグインを使わず、自前で実装する方法を考えましたので紹介します。
ADs
Twitterへの認証部分はライブラリに任せます。
TwitterOAuthが定番ですが、今回はアイキャッチを添付画像にするような処理もやってみたかったのでtmhOAuthというライブラリを使います。
ダウンロードしてテーマと同じディレクトリに置いてください。
以下のコードをfunctions.phpへ追加します。
カスタマーキーやアクセストークンなどはTwitterの開発者向けページより取得しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
require_once 'tmhOAuth.php'; function tweetPost(){ //トークンなどの設定 $tmhOAuth = new tmhOAuth(array( "consumer_key" => 'カスタマーキー', "consumer_secret" => 'カスタマーシークレット', "user_token" => 'アクセストークン', "user_secret" => 'アクセストークンシークレット', 'curl_ssl_verifypeer' => false //SSL対応に必要 )); //ツイートする記事の取得 //いつものget_postsなので、ここでツイートしたい記事の条件をいろいろ指定できる。 $post = get_posts(array( 'numberposts' => 1, 'orderby' => 'rand' )); //ツイートするテキスト(字数は定型文やハッシュタグを使う場合は適宜調整が必要) //以下の例は本文とURLをツイートするものですが、もちろんpost_titleも可です。 $params = array( 'status' => mb_strimwidth('【過去記事】'.strip_tags($post[0]->post_content), 0, 116, "...") . ' ' . get_permalink($post[0]->ID) ); //ツイートする処理 $code = $tmhOAuth->request( 'POST', 'https://api.twitter.com/1.1/statuses/update.json', $params, true, true ); /*アイキャッチを添付画像にしてツイートしたい場合は以下のようになります $file = wp_get_attachment_image_src( get_post_thumbnail_id($post[0]->ID), 'full' ); $file = $file[0]; $image = file_get_contents( $file ); $imagesize = getimagesize( $file ); $params = array( 'status' => mb_strimwidth('【過去記事】'.strip_tags($post[0]->post_content), 0, 116, "...") . ' ' . get_permalink($post[0]->ID), 'media[]' => $image . ";type=" . $imagesize['mime'] . ";filename=" . basename( $file ) ); //URLが違うことに注意 $code = $tmhOAuth->request( 'POST', 'https://api.twitter.com/1.1/statuses/update_with_media.json', $params, true, true ); */ } //Cronへ登録 add_action('tweetcron', 'tweetPost'); function my_activation() { if ( !wp_next_scheduled( 'tweetcron' ) ) { wp_schedule_event(time(), 'hourly', 'tweetcron'); } } add_action('wp', 'my_activation'); |
コード自体はとても短いので、ツイートする記事の取得条件の設定や本文のカスタマイズなども分かりやすいのではないかと思います。
Tweet Old Postは私自身よく使っていてとても気に入っているプラグインですが、プラグインに頼らないで過去ログをツイートするという方法も選択肢の一つとして検討してみてもいいのではないでしょうか。
ADs
過去ログがツイートされないのですが・・・公開時はちゃんと画像付きでツイートされます。分かりますか?
ななし 様
コメントありがとうございます。
WP-Cronがちゃんと動いていないか記述のミスなどがあるのかもしれません。
試しに以下のコードを追加して「http://運用中のURL?tweet=1」とアクセスしてみて、ツイートされるかどうか見ていただけませんでしょうか。
また、その際エラーログが出るようにして(「ini_set(‘display_errors’, 0);」を追記)、どんなエラーが出ているかお伝えいただけますと詳細を調べることができます。
管理者様
ありがとうございます。やっと確認できました。
結果から言いますとCronがちゃんと動いていませんでした(^^;
WPのプラグインを全て停止したら動きましたので、何かのプラグインが原因だったみたいです。
初歩的なミスで失礼しましたm(_”_)m
それとこんどは別の問題が出てきました。
画像が添付されません、教えて頂きました「http://bit.ly/1n7BxD8」で
「http://運用中のURL?tweet=1」を試しても画像の添付が出来ません。
何度か試すと、添付できる場合もありますが、9割方添付できません。
もう少し調べてみます。
ななし 様
必ず添付できないのではなく、添付出来る場合もある、というのが厄介ですね。。。
添付が成功する画像と失敗する画像に何か違いはありませんか?
私が以前経験した事例ですが、スクリプトなどを使って自動で記事を投稿した場合、画像ファイルの形式(JPEGやGIFなど)が正常に判別できず、その正常に判別できてない画像はいろいろとおかしな動作を起こすことがありました。
メディアライブラリの一覧表示で、以下のように拡張子が表示されていなければその添付画像はちょっとおかしいということになります。
http://imgur.com/i4k80z1
初めまして。
こちらの記事を参考にして、過去記事を画像付きで投稿出来るようになりました。ありがとうございます! ツイートに使う画像ですが、アイキャッチ画像ではなくカスタムフィールドで挿入した画像をツイートに添付する場合、36行目のコードをどう変えれば良いでしょうか。もし良ければ教えて頂けないでしょうか。(advanced custom feildを使っております。)
宜しくお願い致します。
tenten23 様
コメントありがとうございます。
$fileに画像のURLが入ればよいので、
$file = wp_get_attachment_image_src( get_post_thumbnail_id($post[0]->ID), ‘full’ );
$file = $file[0];
の2行をAdvanced Custom Fieldsの場合でしたら(画像のフィールド名がimageNameだった場合)
$file = wp_get_attachment_image_src(get_field(‘imageName’), ‘full’);
とすればどうでしょうか。