こちらの要望は以下のとおり。
- 抜粋があればソレを表示して「続きを読む」。
- more タグがあればそこまで表示して「続きを読む」。
- 上記指定が無く、本文が長過ぎなら省略して「...」をつけて「続きを読む」。
- 本文が短い場合は、全文を表示。
- ループ中に
the_excerpt()
とだけ書けば、あとはよきにはからう。
本文の長い短いは、55文字基準(excerpt_length フィルタで変更可能)。WP Multibyte Patch をご使用なら wpmp-config.php の $wpmp_conf['excerpt_length'], $wpmp_conf['excerpt_mblength']
で指定します。
というわけで、以下を functions.php に追加。
function my_excerpt_more($more) {
return ' ...';
}
add_filter('excerpt_more', 'my_excerpt_more');
function my_trim_excerpt($text, $raw_excerpt){
global $post;
$e = explode(' ...', $text);
if($raw_excerpt || false !== strpos($post->post_content, '<!--more') || '' === $e[1])
$text .= '<a class="excerpt-more" href="' . get_permalink() . '">続きを読む</a>';
return $text;
}
add_filter('wp_trim_excerpt', 'my_trim_excerpt', 10, 2);
my_excerpt_more
は、省略の印を ' ...' に変更してるだけです。my_trim_excerpt
で、抜粋があるか、moreタグがあるか、省略されていれば「続きを読む」リンクを追加しています。ここの if がもっとスッキリすると良い。
css で .excerpt-more{display:block;}
とすれば「続きを読む」が抜粋の後に改行して表示されます。画像に変えたりパッディングしたりも css でお好みに。
参照:more タグでがんばる場合
Codex: Customizing the Read More動作確認バージョン
- WordPress 2.9.1
初めまして。長谷川といいます。とても参考になりました。ありがとうございました。
一つ気になったのですが、条件文の「$e[1]」の中は必ずNULLになるようです。今3.0.1を使っていますが、バージョンの違いでしょうか。
こんにちは! if 文中の
$e = explode(‘ …’, $text);
が効いてない様子なので、外に出して
条件も ” === $e[1] に変更しました。
これで OK なはず◎
早速ありがとうございます。上手くいきました。
ただ「explode」を使っているので、「 …」を他のよく使われる文字に書き換えたりすると、上手く動作しないことがありそうですね。
その ‘ …’ は
function my_excerpt_more($more) {
return ‘ …’;
}
add_filter(‘excerpt_more’, ‘my_excerpt_more’);
で、付けてるので自分でコントロール可能なトコロ◎
ってことじゃなくてーって話ならソコのところを詳しく★
すいません何度も。基本的にはPHPやWPのコア部分に精通していないので、そういう人間が何か言ってると思ってください。
問題だと思ったのは「” === $e[1]」という条件です。
これは「excerpt_more」によって文章が分割されたかどうか、を判定するためだと理解しているのですが、もし$text内に「 …」という文字列が複数記載されていた場合、「” === $e[1]」では判定できなくなります。
ただどうも「 …」の場合、WP内で文字が変換されるため問題は起こりにくいようなのですが、うっかり末尾の表現を「〜」などとしてしまうと、投稿される文中に使われる可能性が十分にあり、実際長い文章でも「続きを読む」が表示されないケースがありました。
正規表現で「$text」の末尾が「 …」にマッチ、という条件ぐらいでよいのかなという気もしますが、いかがでしょう?
正規表現で「$text」の末尾が「 …」にマッチ、でステキ◎
explode を使うのがマイブームだったとか、何かを企みつつ explode にして企みを忘れたとかその程度の理由なので、オレならこうだぜ!って皆さんご自身でより良いコードを考えていただくキッカケになれば幸いです☆
ありがとうございます。
自分ではWPのコア内がブラックボックスになってるので、安心しました。
(コメントの続け方、間違ってましたね)
だいぶ弄ったけどやりたいことができた。やっぱりフィルタ使うのが一番だったか…。
だいぶ弄ったけどやりたいことができた。やっぱりフィルタ使うのが一番だったか…。 / the_excerpt で抜粋有無・本文長短・moreタグを考慮して「続きを読む」を付ける | wpxtreme http://t.co/DZ3FUC8