Revive Old Postは過去記事をTwitterやFacebookに定期的に投稿してくれるWordPressのプラグインです。
投稿のインターバルを短くしすぎるとうざがられて逆効果ですが、過去記事へのアクセスを促す効果はもちろんのこと、WordPressを使ってbotを運用するような使い方ができます。
個人的にも非常に気に入っているプラグインなのですが、日本語(というかマルチバイト環境)で使用すると文字化けしてしまうという問題が発生します。この問題を解消する方法を調べました。
検索してみると同じ問題の対応方法を紹介しているブログはたくさん見つかりますが、対象としたバージョンが古いためにどのファイルのどこを修正するのかが最新バージョン(今回調べたバージョンは8.1.7)では異なっています。最新バージョンのRevive Old Postをご利用される方は参考にしてみてください。
ADs
フィルターフックなどで対応できればよかったのですが、残念ながらコアファイルを修正するしか方法はなさそうです。
プラグインのアップデートが入ると再度同じような修正を行う必要がありますので注意してください。
プラグインフォルダの
「tweet-old-post/includes/admin/helpers/class-rop-content-helper.php」
の109行目~139行目のtoken_truncateという関数を修正します。
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 |
public function token_truncate( $string, $new_length = false ) { if ( $new_length ) { $this->length = $this->adjust_for_ellipse( $new_length ); } $parts = preg_split( '/([\s\n\r]+)/', $string, null, PREG_SPLIT_DELIM_CAPTURE ); $parts_count = count( $parts ); $length = 0; for ( $last_part = 0; $last_part < $parts_count; ++ $last_part ) { $length += strlen( $parts[ $last_part ] ); if ( $length > $this->length ) { break; } } $output = rtrim( implode( array_slice( $parts, 0, $last_part ) ) ); /** * If the string contains a single word, larger than the length, * we should get the substring of it. */ if ( empty( $output ) && $parts_count === 1 ) { $output = substr( $string, 0, $new_length ); } // add ellipse only if set and originating text is longer than set length if ( $this->end_ellipse && strlen( $string ) > $this->length ) { $output .= ' ' . $this->ellipse; } return $output; } |
これを
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 |
public function token_truncate( $string, $new_length = false ) { if ( $new_length ) { $this->length = $this->adjust_for_ellipse( $new_length ); } $parts = preg_split( '/([\s\n\r]+)/', $string, null, PREG_SPLIT_DELIM_CAPTURE ); $parts_count = count( $parts ); $length = 0; for ( $last_part = 0; $last_part < $parts_count; ++ $last_part ) { $length += mb_strlen( $parts[ $last_part ] ); //mb_strlenにする if ( $length > $this->length ) { break; } } $output = rtrim( implode( array_slice( $parts, 0, $last_part ) ) ); /** * If the string contains a single word, larger than the length, * we should get the substring of it. */ if ( empty( $output ) && $parts_count === 1 ) { $output = mb_substr( $string, 0, $new_length ); //mb_substrにする } // add ellipse only if set and originating text is longer than set length if ( $this->end_ellipse && mb_strlen( $string ) > $this->length ) { //mb_strlenにする $output .= ' ' . $this->ellipse; } return $output; } |
こうします。 簡単な修正なので作者が対応してくれることを期待します(が、直接要望を送っても全然対応してくれないみたいな話もどこかのブログで読みました…)
ADs