気になったことはなんでも調べてメモするブログ
  1. WordPress
  2. 57 view

【TCD-ZERO】記事一覧で (さらに…) と表示されてしまう問題を解決する

Last updated: 2020/06/28

TCDが開発・配布しているWordPressテーマ「ZERO」を使用していたら、トップページなどの記事一覧が表示される箇所で、 (さらに…) と不自然に表示されることがありました。

テーマのデモサイトではこんな文字は表示されていなかったのに、なぜ?
この記事では、自分なりに原因を調べて解決した方法についてまとめます。

原因は「more」の使用箇所にあった

現象について調べたところ、「more(続きから読む)」を挿入した箇所に (さらに…) と挿入されるはずが、文字化け?というか記号への変換がうまく行われずに、 (さらに…) と表示されてしまう」というのは、他のテーマでもときどき発生しているようです。

「ZERO」では「more」を使用していても記事の冒頭50〜80文字を抜粋する仕様のため、「more」の手前に入力した文字が50〜80文字未満だった場合のみ (さらに…) が挿入されていたのです。

抜粋される文字数が50〜80文字と一定でないのは、閲覧しているのがPCかスマホかで抜粋する文字数が異なるためです。

記事中に「more」を使用する場合は必ず手前に80文字以上書いておくように気をつければ、テーマファイルを修正しなくても (さらに…) が表示されないようにできます。
「短い文字数で「more」を使用したい+(さらに…) は表示されたくない」のであれば、何らかの修正が必要です。

「抜粋」を入力すれば記事の冒頭は使用されなくなる

WordPressには便利な「抜粋」という機能があります。

「ZERO」はこの機能に対応しているので、編集時に「抜粋」を設定していれば記事の冒頭は使用されなくなり、結果、どこに「more」があっても (さらに…) が表示されることはなくなります。

これが最も現実的な解決方法です。

テーマファイルを編集する方法

(さらに…) が嫌なら他の文字列に変えたり、そもそも何も表示されなければいいわけです。
functions.php の一部を編集すると、「more」で挿入する文字列を自由に変更できます。

テーマファイルを編集すると、テーマが更新された際の対応がややこしくなるので基本的にはやらない方がいいです。
gitなどを利用して差分を管理できる状態でチャレンジするとよいでしょう。
// オリジナルの抜粋記事 --------------------------------------------------------------------------------
function new_excerpt($a) {

 if(has_excerpt()) { 

   $base_content = get_the_excerpt();
   $base_content = str_replace(array("\r\n", "\r", "\n"), "", $base_content);
   $trim_content = mb_substr($base_content, 0, $a ,"utf-8");

 } else {

   $base_content = get_the_content();
   $base_content = preg_replace('!.*?!is', '', $base_content);
   $base_content = preg_replace('!.*?!is', '', $base_content);
   $base_content = preg_replace('/\[.+\]/','', $base_content);
   $base_content = strip_tags($base_content);
   $trim_content = mb_substr($base_content, 0, $a,"utf-8");
   $trim_content = str_replace(']]>', ']]>', $trim_content);
   $trim_content = str_replace(array("\r\n", "\r", "\n" , " "), "", $trim_content);
   $trim_content = htmlspecialchars($trim_content);

 };

 echo $trim_content . '…';

};

(テーマのバージョンによって多少、行が異なるかもしれません)

368行目の「get_the_content();」に引数を渡すと、「more」の位置に挿入する文字列を指定できます。

何も表示したくない時は空文字列を指定するとよいでしょう。

   $base_content = get_the_content('');

なにか入力すると下図のように表示されます。

   $base_content = get_the_content('(つづく)');

解決方法:まとめ

  • 「抜粋」を設定しておけば問題は起こらない
  • 「抜粋」を設定しない場合、「more」の手前に80文字以上書いておけば問題は起こらない
  • 「抜粋」を設定せずに「more」の位置に別の文字列を表示したい時は functions.php を編集する
  • テーマファイルを更新した後は、テーマ更新時にファイルを上書きしないように注意が必要




WordPressの最近記事

  1. 【TCD-ZERO】記事のタイトルをh1見出しにする

  2. 【TCD-ZERO】記事抜粋した末尾に「…」が表示されないようにする

  3. 【TCD-ZERO】記事一覧で (さらに…) と表示されてしまう問題を解決す…

  4. All In One WP Securityの初期設定で気を付けるポイント

  5. WordPressテーマを自作しよう(8)トップページと記事ページで別のものを表示する

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

PAGE TOP