モロモロ工事中です

WordPressのthe_contentをthe_excerptを変えようとしたら超大変だったでござるorzの巻

未分類 — さくら @ 2011/09/03 16:28

前にちょっとだけ WordPress の一覧ページの表示を抜粋形式にしてたことがあって、そん時は more を使っていたんですが、今回 the excerpt を使って抜粋表示に直そうとしたらエラいはまったんで、その辺のことをメモっとこうと思います。

the_content を the_excerpt に変えたら個別ページも抜粋表示になったでござるorzの巻

とりあえず WordPress テーマの中の index.php で the_content を呼び出してる箇所を the_excerpt に変えたらいーんだろ?とか思って適当にいじくってみたら、個別ページ(ブログとかページとか)も含めて WordPress 全部が抜粋表示になっちゃいました、テヘ☆

the_excerpt が適当に記事の内容判断して抜粋に切り替えてくれるのかと思ったんですが、この関数は単に抜粋表示するだけのもので、どのページを抜粋にするかは自分で制御しないといけないみたいです。

twentyeleven テーマとかだと元から the_excerpt が入ってて適当にやってくれるみたいなんですが、今 sakuratan.biz で使ってる barecity テーマの場合はそういう処理が入ってないので自分で設定しないといけないっぽいです。


で、色々試行錯誤したあげく↓みたいな感じでテーマの index.php を修正しました。

if (is_singular()) {
    the_content(__('(more...)'));
} else {
    the_excerpt();
}

is_singular() は個別ページの時に真になります。

the_content の引数 __(‘(more…)’) は前に more を使って抜粋していたときの名残りですのであんま気にしないでください。


twentyeleven とかですとこの辺は↓みたいな感じになってます。

if (is_search()) {
    the_excerpt();
} else {
    the_content(__('(more...)'));
}

is_search() は検索結果表示の時だけ真になりますので、twentyeleven ですと検索時以外は全文表示してます。


WordPress の is_ 関数は wp-includes/query.php で定義されていますので、色々試してみたい方はソース見てください。

excerpt_length フィルタを設定しても抜粋表示文字数が変わらないでござるorzの巻

一覧に表示する抜粋の長さは、excerpt_length フィルタで制御できるみたいなんで、テーマの functions.php を↓みたいに変えて400文字に設定しようとしたら全然表示数が変わりませんでした。

functionn new_excerpt_length($length) {
     return 400;
}
add_filter('excerpt_length', 'new_excerpt_length');

ソース grep して調べた結果、WP Multibyte Patch に excerpt_mblength フィルタというのがあって、excerpt_length > excerpt_mblength になると excerpt_mblength のデフォルト値で切り捨てられているため、設定したフィルタが有効になっていない感じでした。

ちなみに WP Multibyte Patch をインスコした状態の excerpt_length とexcerpt_mblength のデフォルト値は 55 と 110 です。


で、最終的に functions.php は↓のようにしました。

functionn new_excerpt_length($length) {