ブログの過去記事をランダムにTwitterでつぶやくWordPressプラグイン「Tweet old post」ですが、日本語のマルチバイト文字に対応していないために、Twitterで「… http://example.com/123」のように日本語の部分が「…」とツイートされてしまいます。

この不具合を修正するには、「Tweet old post」のソースコードを少し修正してあげることで、日本語のタイトルなども正常にツイートされるようになります。

 

WordPress › Tweet Old Post « WordPress Plugins

http://wordpress.org/extend/plugins/tweet-old-post/

 

WordPress管理画面のメニューにある「プラグイン」の「プラグイン編集」に移動します。

「編集プラグインを選択」で「Tweet old post」を選択して「選択」ボタンをクリック。

「tweet-old-post/top-core.php」を編集します。

 

「tweet-old-post/top-core.php」の以下の部分にある「strlen」を「mb_strlen」に、「substr」を「mb_substr」、「strrpos」を「mb_strrpos」に全て変更します。

この作業で間違ってしまうと、他の不具合を誘発してしまう可能性が高いので、一行ずつ慎重に作業してください。

 

//Shrink a tweet and accompanying URL down to 140 chars.
function set_tweet_length($message, $url, $twitter_hashtags="", $hashtag_length=0) {
    $tags = $twitter_hashtags;
    $message_length = strlen($message);
    $url_length = strlen($url);
    //$cur_length = strlen($tags);
    if ($hashtag_length == 0)
        $hashtag_length = strlen($tags);
    if ($twitter_hashtags != "") {
        if (strlen($tags) > $hashtag_length) {
            $tags = substr($tags, 0, $hashtag_length);
            $tags = substr($tags, 0, strrpos($tags, ' '));
        }
        $hashtag_length = strlen($tags);
    }
    if ($message_length + $url_length + $hashtag_length > 140) {
        $shorten_message_to = 140 - $url_length - $hashtag_length;
        $shorten_message_to = $shorten_message_to - 4;
//$message = $message." ";
        if (strlen($message) > $shorten_message_to) {
            $message = substr($message, 0, $shorten_message_to);
            $message = substr($message, 0, strrpos($message, ' '));
        }
        $message = $message . "...";
    }
    return $message . " " . $url . " " . $tags;
}
 

上記を、以下のように修正するとOKです。

 

//Shrink a tweet and accompanying URL down to 140 chars.
function set_tweet_length($message, $url, $twitter_hashtags="", $hashtag_length=0) {
    $tags = $twitter_hashtags;
    $message_length = mb_strlen($message);
    $url_length = mb_strlen($url);
    //$cur_length = mb_strlen($tags);
    if ($hashtag_length == 0)
        $hashtag_length = mb_strlen($tags);
    if ($twitter_hashtags != "") {
        if (mb_strlen($tags) > $hashtag_length) {
            $tags = mb_substr($tags, 0, $hashtag_length);
            $tags = mb_substr($tags, 0, mb_strrpos($tags, ' '));
        }
        $hashtag_length = mb_strlen($tags);
    }
    if ($message_length + $url_length + $hashtag_length > 140) {
        $shorten_message_to = 140 - $url_length - $hashtag_length;
        $shorten_message_to = $shorten_message_to - 4;
//$message = $message." ";
        if (mb_strlen($message) > $shorten_message_to) {
            $message = mb_substr($message, 0, $shorten_message_to);
            $message = mb_substr($message, 0, mb_strrpos($message, ' '));
        }
        $message = $message . "...";
    }
    return $message . " " . $url . " " . $tags;
}

 

これで、日本語タイトルの過去記事も「Tweet old post」でランダムにつぶやくことが可能になります。