記事の抜粋を出力する

WordPressループの中で記事の抜粋を出力するには「the_excerpt()」を使います。
ループ内で「the_excerpt()」を使った箇所では、各記事の投稿ページで設定した抜粋文が表示されます。抜粋が入力されていない場合は投稿の先頭部分が表示されます。
WordPressループについては「個別のブログ記事を出力する」を参考にしてください。
the_excerpt()の使い方
具体的にはWordPressループの中の抜粋を表示したい箇所に次のように記述します。
the_excerpt()の使用例
<!-- WordPressループ -->
<?php if( have_posts() ): ?>
<?php while( have_posts() ): the_post(); ?>
<!-- 抜粋を出力したい箇所 -->
<?php the_excerpt(); ?>
<?php endwhile; ?>
<?php endif; ?>
このとき、出力される内容は次のようになります。
抜粋を設定している場合
各記事の投稿ページで抜粋を設定している場合は、その内容が出力されます。
抜粋を設定していない場合(1)
抜粋を設定しておらず「続きを読む(moreタグ)」がある場合は、タグの直前までを出力します。110文字を超える場合は、末尾に[…]が追加され省略されます。
抜粋を設定していない場合(2)
抜粋を設定しておらず「続きを読む(moreタグ)」がない場合は、本文の冒頭110文字までを出力します。110文字を超える部分は、末尾に[…]が追加され省略されます。
変数に代入したい場合
抜粋の内容を直接出力せず、変数に代入してから文字列として扱いたい場合は「get_the_excerpt()」を使用します。
抜粋を記事内に直接出力する関数「the_excerpt()」では、抜粋や記事の冒頭文を自動的にpタグで囲って出力しますが、「get_the_excerpt()」では同じ内容をpタグを除いた文字列として返します。(※末尾の[…]も含めて返します。)
get_the_excerpt()の使用例
<!-- WordPressループ -->
<?php if( have_posts() ): ?>
<?php while( have_posts() ): the_post(); ?>
<!-- 抜粋を出力したい箇所 -->
<?php
//抜粋を変数に代入
$excerpt = get_the_excerpt();
//変数に代入した内容を出力
echo $excerpt;
?>
<?php endwhile; ?>
<?php endif; ?>
pタグを削除する
the_excerpt()で出力した抜粋文は、自動的にpタグで囲まれて出力されます。このpタグが必要ない場合は「functions.php」で削除することができます。
具体的には「functions.php」に次の一行を記述します。
//the_excerpt()からpタグを除去
remove_filter('the_excerpt', 'wpautop');
functions.phpについては「functions.phpの基本」を参考にしてください。
出力される文字数を調整する
the_excerpt()を使って本文の冒頭を表示する場合、デフォルトでは55文字、日本語などのマルチバイト文字では110文字に設定されています。この文字数を変更したい場合は、「functions.php」で設定することができます。
具体的には次のように記述します。
//the_excerpt()の文字数を変更
function custom_excerpt_length( $length ) {
//変更したい文字数を半角で入力
return 80;
}
add_filter( 'excerpt_length', 'custom_excerpt_length');
get_the_excerpt()を使って文字数を変更
get_the_excerpt()とphpの関数である「mb_substr()」を組み合わせて文字数を変更することもできます。
mb_substr()は文字列の指定された位置から指定バイト分の文字列を取得する関数です。この関数には引数が3つ必要で、それぞれ次の値を指定します。
第一引数:対象文字列
第二引数:取得開始位置
第三引数:取得する長さ
この「mb_substr()」と「get_the_excerpt()」を使って次のように記述することで文字数を変更することができます。
<?php
//取得開始位置
$start = 0;
//取得する長さ(文字数)
$length = 80;
//指定した文字数を出力
echo mb_substr(get_the_excerpt(), $start, $length);
?>