こんにちは、ニアです。
今回は、WordPressにTwitterやFacebookのソーシャルブックマーク・ボタンを設置するプラグイン「WP Social Bookmarking Light」をちょっと改造して、Twitterのリンクにあるviaパラメーターに指定するTwitterアカウントを記事執筆者のユーザー名になるようにしてみた時のお話です。
目次
1. WordPressを複数ユーザーで運用する上での課題点
Chronoir.netでは、記事の内容やそれに関するイベントの参加などによって、執筆者を私(ニア)とミョウガさんで使い分けています。そのため、執筆者がミョウガさんの時はシェア用ツイートのviaパラメーターに指定するユーザー名を@Myoga1012に、私の時は@nia_tn1012にしたかったのです。
「WP Social Bookmarking Light」でviaパラメーターに設定できるTwitterアカウントのユーザー名は1つだけですが、プラグインのファイルにひと手間加え、執筆者別に対応できるようにしていきます。
2. ・・・とその前に
プラグインやテーマのファイルを編集する時は、事前にブログをバックアップしておくことを強く推奨します。
テスト環境がある場合はまず、そちらでテストしてから本番の環境に適用することを推奨します。
プラグインでエラーが発生した時は、そのプラグインが停止するだけで済むことがありますが、テーマでエラーが発生すると、ブログにアクセス不能になってしまう可能性があります。
実際、過去にこのブログでテーマの「functions.php」の編集でのミスにより、ブログ全体がHTTP500(Internal Server Error)のエラーでアクセス不能になるというアクシデントをやらかしてしまったことがあります・・・(汗)。(ちなみにこのエラーは原因となっていた「functions.php」を、エラー前にバックアップしておいたものでサーバーのコントロールパネルから上書きアップロードして直りました。)
バックアップはとってもとっても大事です!
3. 管理画面のユーザープロフィールにTwitterアカウントの項目を追加
まず、WordPressの管理画面のユーザーのプロフィールにTwitterアカウントの項目を追加します。
プロフィール項目の追加方法については
の記事を参考にさせていただきました。
現在使用しているテーマの「functions.php」に以下のコードを追加します。
<?php /* 中略 */ /* ソーシャルメディアをプロフに追加 */ function my_new_contactmethods( $contactmethods ) { $contactmethods['twitter'] = 'Twitter'; /* ツイッター */ $contactmethods['facebook'] = 'Facebook'; /* facebook */ $contactmethods['google_plus'] = 'Google+'; /* Google+ */ return $contactmethods; } add_filter('user_contactmethods','my_new_contactmethods',10,1); /* 中略 */ ?>
こうすることで、ユーザーのプロフィールにTwitterアカウントなどの項目が追加されます。
Twitterの項目に執筆者のユーザー名を入力します。
4. プラグインの編集
次はプラグイン「WP Social Bookmarking Light」の「services.php」を開き、twitter関数の部分を編集していきます。
※使用している「WP Social Bookmarking Light」バージョンは1.7.9です。
/** * @brief twitter */ function twitter() { $options = wp_social_bookmarking_light_options(); $twitter = $options['twitter']; $post = get_post($post_id); $author_twitter = ""; if ($post){ $author = get_userdata($post->post_author); $author_twitter = $author->twitter; } return $this->link_raw('<iframe allowtransparency="true" frameborder="0" scrolling="no"' .' src="//platform.twitter.com/widgets/tweet_button.html' .'?url='.$this->encode_url .'&text='.$this->encode_title /* viaにはWordpressのユーザー設定で入力したTwitterIDにします。 */ .($author_twitter != '' ? '&via='.$author_twitter : '') /* .(twitter['via'] != '' ? '&via='twitter['via'] : '') */ .'&lang='.$twitter['lang'] .'&count='.$twitter['count'] .'" style="width:130px; height:20px;">' .'</iframe>'); }
8行目の「get_post($post_id)」で記事のレコードを取得し、そのレコードから11行目の「get_userdata($post->post_author)」で執筆者の情報が格納されたオブジェクトを取得します。
そのオブジェクトから12行目の「$author->twitter」で執筆者のTwitterアカウントのユーザー名を取得します。
それを14行目の「$this->link_raw」内の引数、19行目の「&via=’【ユーザー名】’」の【ユーザー名】に設定すると、リンクのviaパラメーターを執筆者のTwitterアカウントのユーザー名にすることができます。
※バージョン1.8.0用(リンクに直接代入する代わりに、元々用意されている変数「$data_via」に代入しています)
/** * @brief twitter */ function twitter() { $post = get_post($post_id); $author_twitter = ""; if ($post){ $author = get_userdata($post->post_author); $author_twitter = $author->twitter; } $options = wp_social_bookmarking_light_options(); $twitter = $options['twitter']; $data_url = $this->url; $data_text = $this->title; $data_via = $author_twitter !== '' ? 'data-via="'.$author_twitter.'"' : ( $twitter['via'] !== '' ? 'data-via="'.$twitter['via'].'"' : '' ); $data_size = $twitter['size'] === 'large' ? 'data-size="large"' : ''; $data_related = $twitter['related'] !== '' ? 'data-related="'.$twitter['related'].'"' : ''; $data_hashtags = $twitter['hashtags'] !== '' ? 'data-hashtags="'.$twitter['hashtags'].'"' : ''; $data_dnt = $twitter['dnt'] ? 'data-dnt="true"' : ''; $data_lang = $twitter['lang'] !== '' ? 'data-lang="'.$twitter['lang'].'"' : ''; return $this->link_raw( '<a href="https://twitter.com/share" class="twitter-share-button"{count}' .' data-url="'.$data_url.'"' .' data-text="'.$data_text.'"' .' '.$data_via .' '.$data_size .' '.$data_related .' '.$data_hashtags .' '.$data_dnt .' '.$data_lang .'>Tweet</a>' ); }
ファイルを編集したら更新して、動作確認をすることを忘れずにね。
例えばChronoir.netでは、このように記事の執筆者のTwitterユーザー名に変化します。
5. Twitterのシェア用ツイートのURLってどうなっているの?
ところで、Twitterのシェア用ツイートのURLはどのような構成になっているのでしょうか?
Twitterのシェア用ツイートのURLは以下のような構成になっています。
https://twitter.com/intent/tweet?original_referer=【記事のURL】&text=【記事のタイトル名】&tw_p=tweetbutton&url=【記事のURL(※original_refererのものと同じURL)】&via=【Twitterアカウントのユーザー名】
例えばこの記事の場合、シェア用のツイートのURLは
https://twitter.com/intent/tweet?original_referer=//chronoir.net/change-twitter-via-on-link-to-auther-id/&text=Twitterのシェア用ツイートのviaを記事執筆者のユーザー名にしてみよう&tw_p=tweetbutton&url=//chronoir.net/change-twitter-via-on-link-to-auther-id/&via=nia_tn1012
のようになります。実際には赤文字の部分がURLエンコードされたものになります。
そのURLの末尾側にある、「via」パラメーターに設定したアカウントのユーザー名がツイートに「@○○さんから」とか「via @○○」などとして表示されるのです。
6. おわりに
この記事ではプラグイン「WP Social Bookmarking Light」を利用しましたが、ソーシャルボタンを自作する時にも応用できそうです。
複数ユーザーでWordPressを運営している時に、活用してみてはいかがでしょうか。
それでは、See you next!
更新履歴
- 2015/01/13:実際にシェア用ツイートに表示されるTwitterアカウントのユーザー名が変化する様子の図を追加しました。