これを抜粋表示に変更する方法としてよく紹介されているのが、下記のように content.php の条件文を細工するという技です。
<?php if ( is_search() ) : ?>
<div class="entry-summary">
<?php the_excerpt(); ?>
</div><!-- .entry-summary -->
<?php else : ?>
上記1行目の if 文を下記に変更。
<?php if ( is_search() || is_home() || is_archive() ) : ?>
ただこれでは、テーマをアップデートするたびにファイルを修正しなければなりません。
そこで子テーマの出番になるわけですが、子テーマの functions.php に下記のコードを加えると、疑似的な抜粋表示が実現できます。
(もちろん、子テーマではなく通常の functions.php に追加しても動きます。)
function show_excerpt($the_content) {
if (is_search() || is_home() || is_archive()) {
return mb_substr(trim(preg_replace('/\s{2,}/', ' ', strip_tags($the_content))), 0, 55) . ' … <a href="' . get_permalink() . '">続きを読む →</a>';
} else {
return $the_content;
}
}
add_filter('the_content', 'show_excerpt');
if 文の内側の文字列変換は下記のような順序で行っています。
- strip_tags($the_content) で本文のタグをすべて削除
- preg_replace('/\s{2,}/', ' ', $hoge) で2つ以上連続した空白文字を半角スペースに変換
- trim($hoge) で先頭と末尾の空白文字を削除
- mb_substr($hoge, 0, 55) で、the_excerpt() と同様、先頭の55文字を切り出し
- 文字列の末尾に「…」と記事へのリンクを追加
探した限り、この方法はどのサイトにも載っていなかったので、もしお役に立ちましたらコメントをいただけると嬉しいです。
なお、この方法と content.php を細工する方法とで、HTML タグの class が若干変わるようですので、適宜スタイルシートなども修正する必要があるかも知れません。