WordPressのthe_excerpt()をカスタマイズする

WordPressのthe_excerpt()をカスタマイズする

Posted at October 29,2011 2:55 AM
Tag:[Customize, the_excerpt, WordPress]

WordPressのthe_excerpt()は、抜粋を表示するためのテンプレートタグです。ここではTwenty Elevenテーマを使って、the_excerpt()の末尾に表示する内容を変更する方法を解説します。

Twenty Elevenテーマでは、検索結果の本文の一部を表示するためにthe_excerpt()を使っており、抜粋の最後に「続きを読む→」を表示しています。

デフォルトの検索結果
デフォルトの状態

以下、the_excerpt()に掲載されているサンプルを拝借して、カスタマイズ方法を紹介します。それぞれのコードは利用テーマのfunctions.phpに追加してください。

1.末尾の文字列を変更する

function new_excerpt_more($more) {
    return ' ..... ';
}
add_filter('excerpt_more', 'new_excerpt_more');

2.末尾に何も出力しないようにする

function new_excerpt_more($more) {
    return '';
}
add_filter('excerpt_more', 'new_excerpt_more');

3.「続きを読む」のパーマリンクを設定する

function new_excerpt_more($post) {
    return ' <a href="'. esc_url( get_permalink() ) . '">' . 'Read the Rest...' . '</a>';	
}	
add_filter('excerpt_more', 'new_excerpt_more');

4.Twenty Elevenテーマの場合

冒頭のTwenty Elevenテーマの「続きを読む→」という表示は、functions.phpに次のようなexcerpt_moreフィルタが設定することで実現しています。

function twentyeleven_continue_reading_link() {
	return ' <a href="'. esc_url( get_permalink() ) . '">' . __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'twentyeleven' ) . '</a>';
}
 
function twentyeleven_auto_excerpt_more( $more ) {
	return ' &hellip;' . twentyeleven_continue_reading_link();
}
add_filter( 'excerpt_more', 'twentyeleven_auto_excerpt_more' );

5.excerpt_moreフィルタについて

excerpt_moreフィルタは、wp-includes/formatting.phpのwp_trim_excerpt()に実装されています。

function wp_trim_excerpt($text) {
    $raw_excerpt = $text;
    if ( '' == $text ) {
        $text = get_the_content('');
 
        $text = strip_shortcodes( $text );
 
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]&gt;', $text);
        $text = strip_tags($text);
        $excerpt_length = apply_filters('excerpt_length', 55);
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
        $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
        if ( count($words) > $excerpt_length ) {
            array_pop($words);
            $text = implode(' ', $words);
            $text = $text . $excerpt_more;
        } else {
            $text = implode(' ', $words);
        }
    }
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

excerpt_moreフィルタでwp_trim_excerpt()を起動する定義は、default-filters.phpにあります。

add_filter( 'get_the_excerpt', 'wp_trim_excerpt'  );

6.抜粋の文字数を変更する

本エントリーとは主旨が異なりますが、抜粋に表示する文字数を変更する場合は「WordPressで抜粋の文字数を変更する方法」を参照してください。

英語の場合は次のコードで実現できます。

function new_excerpt_length($length) {
     return 20;
}
add_filter('excerpt_length', 'new_excerpt_length');
関連記事
zenback
人気エントリー
トラックバックURL


トラックバック

WordPressの続きを読むリンクに全文リンクを追加 from プログラミング日記
以前紹介した「WordPressで続きを読むリンクをカスタマイズ」記事に、あるコメントを頂きました。 コメントの内容にリンクが貼られていたのでリンク先を確... [続きを読む]

Tracked on May 4, 2013 8:07 PM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)