デフォルトでも抜粋という入力欄がある。
このデフォルトの抜粋はカスタムフィールドの一種だそうな。
まずは、普通の抜粋からメモっておこう。
本文を抜粋するあれこれ
1.抜粋を表示させる。
1 |
<?php the_excerpt(); ?> |
2.長さを調節する
1 2 3 4 5 6 |
<?php function custom_excerpt_length( $length ) { return 20; //文字数を指定 } add_filter( 'excerpt_length', 'custom_excerpt_length', 999 ); ?> |
3.続きを読むのリンクを設定
1 2 3 4 5 6 |
<?php function new_excerpt_more( $more ) { return ' <a class="read-more" href="'. get_permalink( get_the_ID() ) . '">続きを読む</a>'; } add_filter( 'excerpt_more', 'new_excerpt_more' ); ?> |
デフォルトの抜粋に未入力の場合、本文から引っ張らないための措置
functions.phpに記載
1 2 3 4 5 6 7 8 |
<?php function excerpt_filter() { global $post; $output = ($post->post_excerpt) ? $post->post_excerpt : ''; return $output; } add_filter('get_the_excerpt', 'excerpt_filter'); ?> |
これをやるときれいに外れる。これは公式フォーラムで見つけたコードだけど、Codexを読んだらもっとシンプルにできた。
1 2 3 |
<?php remove_filter( 'get_the_excerpt', 'wp_trim_excerpt' ); ?> |
抜粋表示でマークアップされるpタグを外す
1 2 3 |
<?php remove_filter('the_excerpt', 'wpautop'); ?> |
やりたかったこと
本文を抜粋するんじゃなくて、抜粋欄を使いたかった。最初カスタムフィールドを作ろうと思った。それも方法だし、便利に使えるのかも知れないが、デフォルトで抜粋が用意されているのに使わないのももったいない。なので、抜粋を使うことにした。
- 抜粋を使い、トップページのリスト表示に載せる。
- 抜粋をもし書かない場合(書くんだけど)、本文を引っ張るんじゃなくて空欄にしたかった。
結果は前述のとおり、フィルターフックを削除するだけで実現できた。ところで、抜粋はデフォルトではPタグでマークアップされるので、これをspanにした方がいいのかどうかを考えた。リストタグにpタグを入れ子にするということをあまりしてこなかったので。
でも、文法的には特段間違いじゃないし、そのまま出力することにした。pタグを削除して、spanでマークアップしてみたんだけど、抜粋欄が空の場合でもspanが出力されてしまう(やり方はあるんだろうけどさ)。
3時間くらいかけていろいろやってみたいけど、コアファイルを見たり、データベースに当たったり。コピペするだけじゃなくて、ちゃんと自分で作業しなきゃだめだなって思いましたわ。