ご注意下さい
この記事は3年以上前に書かれた記事ですので、内容が古い可能性があります。
記事の紹介文に対して「続きを読む」などのリンクを作成してくれるAdvanced Excerptは非常に便利なプラグインですが、これを導入したことで残念ながら当ブログでは3つの不具合が発生してしまいました。その事象と解決方法についてご紹介したいと思います。
Advanced Excerpt
この記事のもくじ
Advanced Excerptを導入すると発生する不具合について
先にご紹介した通り、何も考えずに導入するとおそらく大抵の人は2つ不具合が出ます。もう一つは設定の誤りですので厳密には不具合ではありませんが気づかずにスルーしてしまうこともある事象です。
Advanced Excerptを導入すると発生する不具合
- 抜粋記事の後ろ「続きを読む」の手前の文字が文字化けしていることがある
- RSSフィードがエラーとなっており実は出力されていない(分かりづらい)
- 記事一覧にて表示される記事紹介文が「本文」からの抜粋、になっており「記事抜粋」からの抜粋になっていない
という事象です。画面キャプチャを見ながら事象について見ていきましょう。
文字化けすることがある
この画面キャプチャを見てもらえれば一目良縁です。
これは読者の観点からは非常に気になります。
RSSフィードエラー
これは気づきづらいですがRSSフィードは配信しているサイトの場合、こちらもエラーになっていると思います。https://○○.jp/feedにアクセスして見ください。Internal Server Error 500が出ていませんか?
なかなか確認することもないページなので気づきづらいですが、RSSリーダーで情報を受け取っている読者に通知がいかないことになりますので要注意です。
抜粋する箇所が想定と違う(記事抜粋から抜粋して欲しい)
そして、記事の一覧画面です。一見なんの問題もなさそうに見えますが、実はこれ全て「記事本文」の抜粋になっており、私が紹介用に書いた記事の「抜粋」の抜粋になっていません。
しかもごちゃごちゃとしており、雑然とした印象です。
原因と対策について
さて、事象を確認したところで対策について見ていきましょう。
文字化けとRSSフィードエラーについて
これは文字化けが原因でRSSフィードエラーも発生しています。ですので文字化けを直すことで2つの対策を打つことができます。
対策としてはマルチバイトに対応していない関数をマルチバイト対応の関数に書き換えることで解消します。下記のsubstr関数をマルチバイト対応のmb_substrと書き換えるだけです。
if ( $finish == 'exact_w_spaces' ) { $chars = $t; } else { $chars = trim( $t ); } $c = mb_strlen( $chars ); if ( $c + $w > $length && 'sentence' != $finish ) { // Token is too long $c = ( 'word' == $finish ) ? $c : $length - $w; // Keep token to finish word $t = mb_substr( $t, 0, $c ); } $w += $c;
抜粋表示が本文からになっている件について
こちらはAdvanced Excerptの設定の見直しが必要です。
デフォルトの設定だと「No Custome excerpts」にチェックが入っていることで記事抜粋からではなく本文から抜粋していたようです。
記事は以上。