ページに合わせた抜粋を表示する
WordPressで抜粋を表示するには「the_excerpt()」というテンプレートタグを追加するだけです。とても便利ですが、この方法では全て同じフォーマットで出力されてしまいます。
「ホームでは要素が多いので短い抜粋、一覧ページでは内容を把握してもらいたいので長めの抜粋を表示したい」そんな需要は多いのではないでしょうか。
そこで今回は「functions.php」でフィルター関数を追加する方法を解説します。
今回の目標
- ホームで抜粋を表示したときは本文の長さを半分にする。
- 同じくホームでは「続きを読む →」を削除。
設定方法
設定するファイルは「wp-content > themes > twentyten > functions.php」にあります。(twentytenを使っている場合)
ホームで抜粋を表示したときは本文の長さを半分にする方法
「functions.php」を開いて最後に以下のタグを追加。
1 2 3 4 5 6 7 8 9 | // ホームだけ抜粋の本文を半分に function new_excerpt_mblength( $length ) { if (is_front_page()) { return 55; } else { return 110; } } add_filter( 'excerpt_mblength' , 'new_excerpt_mblength' ); |
2行目「new_excerpt_mblength($length)」でマルチバイトの本文を指定
3行目「if (is_front_page())」でフロントページを表示しているときという条件を指定
4行目「return 55」でフロントページを表示しているときは55文字(マルチバイト文字だと27文字)
6行目「return 110」でフロントページ以外を表示しているときはデフォルトの110文字
9行目で新しいマルチバイト用のフィルター関数を追加
同じくホームでは「続きを読む →」を削除。
上の設定と同じく「functions.php」を開いて最後に以下のタグを追加。
1 2 3 4 5 6 7 8 9 | // ホームだけ「続きを読む→」を削除 function new_excerpt_more( $post ) { if (is_front_page()) { return '...' ; } else { return '... <a href="' . get_permalink( $post ->ID) . '">' . '続きを読む→' . '</a>' ; } } add_filter( 'excerpt_more' , 'new_excerpt_more' ); |
基本的に同じ構造なので詳しくは説明しませんが、「new_excerpt_more($post)」で続きを読むを変更しています。上の「…」がホームで抜粋を表示しているときの表記、elseの下にあるものがそれ以外のページを表示しているときの表記になります。
さらに詳しく知りたい方は「WordPress Codex「the_excerpt」のページ」を参照してください。
上の2つの変更で以下のようになります
ホームで「the_excerpt()」を使った場合
本文の長さが通常の半分で、「続きを読む→」の表記がなくなっている。
ホーム以外のページで「the_excerpt()」を使った場合
通常の本文の長さで、「続きを読む→」の表記がある。