the_content() と the_excerpt() を抜粋として使い分ける【WordPress】

記事の抜粋を表示する際はthe_excerpt()またはget_the_excerpt()を使いますが、「続きを読む」を利用して表示する範囲を制御したい場合はthe_content()を使うことになります。どちらも広い意味で抜粋といえるかと思いますが、今回は両者の抜粋として表示される内容の違いについて説明したいと思います。

PR

基本的な違いは?

WordPress Codexによるとthe_content()は投稿の本文を出力する、the_excerpt()は抜粋を表示するとあります。標準の動作としてはthe_content()の内容はエスケープされずhtml通りに全文を表示します。対してthe_excerpt()はhtml無効となり画像も表示されず範囲も決まっており、文章の途切れた部分に「…」が表示されます。

さらに投稿毎に設定された「続きを読む」ブロックの利用、「抜粋欄」の利用により表示内容が変わってきます。

the_excerpt()<p>タグが付いた状態で表示されますが、get_the_excerpt()ではテキストのみを返します。

「続きを読む」(moreタグ)を使った場合

the_content()

投稿を分割する際に使う「続きを読む」ブロックを使用している場合、その部分までの本文を表示します。記事の単独ページではこの限りではなく、全文が表示されます。

the_excerpt() / get_the_excerpt()

「続きを読む」が設置された部分までの指定された範囲を表示します。

「抜粋欄」に入力した場合

the_content()

the_content()では抜粋欄に入力されたものはどのような場合でも表示しません。

the_excerpt() / get_the_excerpt()

抜粋欄に入力されたものがある場合、the_excerpt()ではこれを全て表示します。このとき本文は表示されません。htmlは無効となりますが改行は反映されます。

※抜粋の範囲について

抜粋される範囲のデフォルトは英語で55単語となっています。日本語では単語数を判定できず全文が表示されてしまったりしますが、プラグイン「WP Multibyte Patch」を有効化することで日本語110文字を抜粋として出力します。

文字数と文末文字の変更

抜粋文字数と文末文字はfunctions.phpで変更できます。文末文字にリンクを張ることもできます。

/** 文字数を変更する */
function new_excerpt_mblength( $length ) {
  return 900;
}
add_filter( 'excerpt_mblength', 'new_excerpt_mblength' );

/** 文末文字の変更 */
function new_excerpt_more( $post ) {
  return '続きを読む';
}
add_filter( 'excerpt_more', 'new_excerpt_more' );

/** 文末文字の変更(リンク付き) */
function new_excerpt_more( $post ) {
  return '<a href="' . get_permalink( $post->ID ) . '">続きを読む</a>';
}
add_filter( 'excerpt_more', 'new_excerpt_more' );

/** 固定ページでも抜粋を利用 */
add_post_type_support( 'page', 'excerpt' );

表示内容の違い:まとめ

the_content()the_excerpt() / get_the_excerpt()
「続きを読む」利用時「続きを読む」ブロックで指定した位置まで110文字以内かつ「続きを読む」ブロックで指定した位置まで
抜粋欄使用時無効抜粋欄に入力されたものを全て表示
上記以外全文表示指定された文字数 +「…」
エスケープhtml有効html無効 抜粋欄使用時の改行は有効

参考リンク
WordPress Codex – the_content()
WordPress Codex – the_excerpt()
WordPress Codex – get_the_excerpt()


PR

タイトルとURLをコピーしました