/home/by-natures/dev*

データ界隈で働くエンジニアとしての技術的なメモと、たまに普通の日記。

プラグイン「tweetable」のブログ記事自動投稿で、表示方法を変更しました

WordPressプラグインtweetable」は、Twitterの投稿内容をWidgetに表示したり(トップページの右に表示されているやつです)、ブログ記事を作成した際に、記事のタイトルとリンクをTwitterに自動投稿してくれる便利なプラグインです。

しかし自動投稿してくれるツイートの表記が

ブログ記事名+短縮URL 例)  プラグイン「tweetable」のブログ記事自動投稿で、表示方法を変更しました  bit.ly/aaa

というような感じで、非常にあっさりとしているんです。せめてブログタイトルぐらいは入れたいなと思っていて、WordPressプラグインについて調べる機会があったので、ついでとばかりにブログタイトルをいれてみました。

tweetableのブログ記事投稿部分は、tweetable.php内の次の関数 tweetable_publish_tweet で処理されています:

/*** Send tweet on post publish ***/
function tweetable_publish_tweet($post_id) {
        $installed = get_option('tweetable_account_activated');
        if (get_option('tweetable_auto_tweet_posts') == '1' && $installed) {
                【【中略】】
                $permalink = apply_filters('tweetable_autotweet_permalink', $permalink);★
                $permalink = $twitter->shorten_url($permalink, $shortener, $shortener_apikey, $shortener_login);
                $title = $tweet_prefix.' '.$post->post_title;
                $title = apply_filters('tweetable_autotweet_title', $title);★
                $tweet = $twitter->fit_tweet($title, $permalink);
                $tweet = apply_filters('tweetable_autotweet_tweet', $tweet);★

                $update = $twitter->update_status($tweet, $user_key, $user_key_secret);
        }
}

中略せずに残した部分は、記事名やURLをくっつけて、Twitterに投稿する部分です。★をつけた行に、apply_filtersが見えると思いますが、これは第1引数のフィルターフックに紐づくフィルターが存在すれば、それを第2引数へ適用してくれる関数のようです。しかし「tweetable」のreadme.txtを見ると、デフォルトではこの3つのフィルターフックに紐づくフィルタは存在せず、ユーザが自由に定義できることになっています。

そこで今回は、3つ目の★で使えるtweetable_autotweet_tweet に紐づくフィルタを定義し、「tweetable」が生成したツイートに、このブログ名をつけてみたいと思います。

まずは tweetable_autotweet_tweet が実際にどのフィルタと紐づくのかを定義します(定義場所はtweetable.phpの中ならどこでもいいと思うけど、他のフィルタ定義がある最上部が無難):

add_filter('tweetable_autotweet_tweet', 'tweetable_autotweet_tweet_add_blogname');

tweetable_autotweet_tweet_add_blogname は、新しく定義したフィルタ名です。このフィルタ名を関数名にして、ブログ記事をくっつけます。ブログ記事はget_bloginfo('name')で取得できます。WordPressにはbloginfo()関数もあるのですが、変数に保持する場合はget_bloginfo()を用います(これでちょっと詰まった…)。ちなみにbloginfo()は標準出力にそのまま出力してしまう関数のよう。

function tweetable_autotweet_tweet_add_blogname($tweet){
        $blogname = get_bloginfo('name');
        return '【'.$blogname.'】 '.$tweet;
}

これで作業は終了です。この追加作業により、自動投稿されるツイートは次のようになりました:

【ブログ名】 ブログ記事名+短縮URL 例) 【By-Natures::Blog】 プラグイン「tweetable」のブログ記事自動投稿で、表示方法を変更しました bit.ly/aaa

WordPressプラグインの仕組みも面白いし、何より「tweetable」がここまで綺麗な拡張を用意してくれているのが驚きでした。既存の関数を変更しないで済むのが素晴らしいです。