WordPressテーマカスタマイズ
WordPressのトップページに表示される最新記事。このテキスト部分の表示方法について、ちょっと調べたのでメモしておこうと思います。

今回はトップページテーマ(index.php)内の最新記事のテキスト部分について。
index.php

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
 (この部分に、タイトル、日時、カテゴリ表示、記事の一部表示)
<?php endwhile; ?>

大抵の場合、上記の「記事の一部表示」のテキスト部分にかかれているのは以下の記述です。
index.php

<?php the_content('続きを読む'); ?>

私の今のテーマでは、この部分に記事の一部(<!--more-->のタグの前の部分)が表示されるようになっています。

トップページの最新記事一覧のテキスト表示方法(目次)

  1. 続きを読むを消す
  2. 文字数を決めて記事のテキストを表示
  3. 記事の一部(<!--more-->タグの前)を表示する
  4. 記事の一部テキストのみ(<!--more-->タグの前)を表示する

1.「続きを読む」を消す

「続きを読む」を別な文字に変える方法ではなく、それ自体を消してしまう方法です。
記事抜粋やアイキャッチ画像全体にリンクする時は、続きを読むのリンクは無いほうが扱いやすくなります。
index.php

<?php the_content('',false,''); ?>

続きを読むの値をfalseにするという事で「続きを読む」は消えます。
消してしまうとリンクもなくなります。

文字数を決めて記事のテキストを表示

トップページの最新記事一覧では、決めた文字数を表示したいという時があります。表示される記事を決めた文字数にすれば、レイアウト的にも扱いやすくなります。
以前、制作したサイトでもそのような事があったのですが、随分前の事で…。今回は忘れないように、このブログに書いておきます。
index.php

<?php
if(mb_strlen($post->post_content, 'UTF-8')>120){
  $content= mb_substr(strip_tags($post->post_content), 0, 120, 'UTF-8');
  echo $content.'続きを読む';
}else{
  echo strip_tags($post->post_content);
}
?>

参考サイト:WordPress - 投稿の本文を文字数制限、HTMLタグを除外、特定のHTMLタグを残す|及川WEB室

120のところが、抜き出す文字数です。
・120文字より大きい場合は、120文字抜き出し「続きを読む」をつける
・そうでなければ、全文表示
となります。

特定のタグを残したい場合については、参考サイトに詳しく載っていますので、確認してみてください。

他にも以下のサイトに指定数の文字を抜き出す方法について、丁寧にかかれています。
参考サイト:【WordPress】投稿本文の文字数を制限してテキストのみで取得する方法(wp_trim_wordsが最も正確) | DISPLAY

以前制作したサイトでは、これに加えて特定カテゴリのみ、という表示も書いた気がしますが、随分前ですし、また後ほど書こうと思います。

記事の一部(<!--more-->タグの前)を表示する

 

今まで使っていた the_content() ですが、これとは別に
get_the_content() という方法もあります。

簡単に書くと、get_the_content() は the_content()で加工する前のテキストデータです。

index.php

<?php
  $content = apply_filters( 'the_content', get_the_content() );
  $content = str_replace( ']]>', ']]&gt;', $content );
?>
<?php echo $content; ?>

参考サイト:投稿の本文を取得・表示する | The WordPress Press

get_the_content() を使って、the_content()と同じ結果(表示)にする方法です。
参考サイトに詳しく書かれていますが、get_the_content() ではhtmlタグなどがそのまま表示されてしまうため、このように書きます。

この記述、参考サイトで確認するとCodexに載っていました。
テンプレートタグ/the content - WordPress Codex 日本語版

the_content()と同じ結果(表示)なら、the_content()を書けばいいんじゃないと言われそうですが、単に私が忘れそうなのでメモしておきます。

ちなみにget_the_content()で「続きをよむ」を消したい場合も()内の'',false,''を書きます。

記事の一部テキストのみ(<!--more-->タグの前)を表示する

index.php

<?php
  $content = get_the_content('',false,'');
  $content = wp_strip_all_tags( $content );
?>
<?php echo $content; ?>

参考サイト:WordPressで投稿の本文のテキストだけを取得する方法 | WWWクリエイターズ

参考サイトを元に「続きを読む」を消す

'',false,''

を入れました。

参考サイトでは、ショートコードを消す

$content = strip_shortcodes( $content );

もかかれていますが、私は抜粋部分にショートコードを使ってないので、省略しています。

今回は、トップページのindex.phpとして書いていますが、categoryやtagページでも同様に使えます。

今回、このブログのテーマを少し修正しようと、久々にテーマを調べていました。6年前の知識では、あやふやな事が多く、細かな部分やテーマやSEO関連も色々変わってきているようで…。

そんな訳で、無理せずゆっくりカスタムしていこうと思っています。

どこまで追いつけるか判りませんが、出来る範囲でボチボチやっていこうと思っています。

2024年10月追記:
上の「記事の一部テキストのみ(タグの前)を表示する」だと、文の改行は無視され表示されますが、改行もそのまま表示したい場合は以下となります。
index.php

<?php
  $content = get_the_content('',false,'');
  $content = wp_strip_all_tags( $content );
 $content = apply_filters( 'the_content', $content );
 $content = str_replace( ']]>', ']]&gt;', $content );
?>
<?php echo $content; ?>