wordpress プラグインの「WP Multibyte Patch」デフォルトの抜粋の文字数の変更

2013年6月9日

プラグインの「WP Multibyte Patch」を有効化して「the_excerpt()」をテンプレートに記述すると、デフォルトで本文から110文字を抽出して抜粋文を自動生成して出力する。

デフォルトの抜粋記事のテキスト量を変更するには functions.php に以下を記述する。

function new_excerpt_mblength($length) {
    return 60;
}
add_filter('excerpt_mblength', 'new_excerpt_mblength');

本文から抜粋されたテキストの最後の文字列を「[…]」から「・・・」に変更するには functions.php に以下を記述する。

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

特定のページに表示する抜粋の文字数のみを変更する場合

抜粋の文字数の設定がすでに、functions.php にしてあるが、特定のページのみ文字数を変更する場合、 add_filter(‘excerpt_mblength’,~) の設定では「if(is_home())~」といった生成ページを判別する条件分岐が機能しない。

  • 特定のページのテンプレート(例:archive.phpなど) に add_filter(‘excerpt_mblength’,’異なる関数名’) の設定を記述する。
  • 特定のページのテンプレートに記述されたadd_filter(‘excerpt_mblength’,~) の設定は functions.php の設定よりも後に実行されるので、その設定が上書きされる。
  • ここでの add_filter(‘excerpt_mblength’,~) の2つ目のパラメータで指定する関数名は、functions.php で指定してある関数名とは異なる名前にしないとエラーとなるので注意。
  • また、add_filter(‘excerpt_mblength’,~) の設定は抜粋を出力する「the_excerpt()」より前に記述する必要がある。
  • 以下の例の場合は、抜粋の最後に「続きを読む」というリンクを続けて出力するように「get_the_excerpt()」を使っている。
//archive.php に記述
<?php get_header(); ?>
<?php
function excp_length_archive($length) {
  return 200;
}
add_filter('excerpt_mblength', 'excp_length_archive');
?>
...
<div class="excerpt">
<?php echo '<p>' .get_the_excerpt() . '<span class="more"><a href="'.get_permalink(). '"> (続きを読む)</a></span></p>'; ?>
</div><!-- end of .excerpt -->