抜粋プラグイン「Advanced Excerpt」の文字化けを直そう!
このサイトでも使用していますが、WordPressで記事のアーカイブを表示する時、本文を抜粋して表示することが多いと思います。
しかしWordPressのデフォルトの抜粋ではHTMLタグが無くなってしまいます。(もちろん改行の<br>タグも)
Advanced Excerptとは?
そんな時便利なのがAdvanced Excerptというプラグイン。
文字が化ける…
しかし、このプラグイン問題がありまして、たまに抜粋の最後が文字化けしてしまうことがあるんです。
原因はこのプラグインが英語圏での使用を念頭に置いて作られているため、マルチバイト文字の日本語で使用すると問題が起きてしまうのです。
どうやって直すの?
そこで解決方法です。
Advanced Excerptプラグインのフォルダの中にある「advanced-excerpt.php」を開くと190行あたりに、下記のようなコードがあります。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php { // Count/trim characters $chars = trim($t); // Remove surrounding space $c = strlen($chars); if ($c + $w > $length && !$finish_sentence) { // Token is too long $c = ($finish_word) ? $c : $length - $w; // Keep token to finish word $t = substr($t, 0, $c); } $w += $c; } |
ハイライト部分のコードを
$t = mb_substr($t, 0, $c);
に書き換えます。(「mb_」を追加する)
それで保存、アップロードすれば完了です。
解説
簡単に解説しますと、substr関数は指定した文字数で切り取る関数ですが、その数の数え方がマルチバイトに対応していないため、半角文字と全角文字が混ざった文章だと、1文字の半分で切られてしまうということが起きます。その場合に文字が化けてしまうのです。
mb_substr関数はマルチバイト文字に則した文字数の数え方をしてくれるので、文字化けせずに表示されるようになるというわけです。
ご注意下さい
この解決法の場合、プラグインのアップデードを行うとファイルが上書きされてしまいます。
上書きされると、書き加えた変更点が元に戻ってしまうので、もう一度追加し直す必要があります。
幸か不幸かこのプラグインはあまりアップデートはされていないようです。
3件のコメントがあります。
なんて神エントリ!助かりました、ありがとう!
外国の無料テーマを使っていて、抜粋がうまくいかずに悩んでいました。
一切抜粋されない、または最後の文字化けという現象です。
具体的な対処法は違いましたが、こちらで大きなヒントを得て解決しました。
ありがとうございます!