WordPressでは簡単に記事の抜粋表示ができます。
トップページやカテゴリージページなどで全文表示されている状態ならば、テンプレート上のthe_content()
をthe_excerpt()
に変更すれば抜粋表示にできます。
抜粋のイメージは以下のようになります。
WordPress Codex は、ウェブログシステム WordPress の公式オンラインマニュアル(ドキュ […]
今回は抜粋の文字数や文末の表示などの表示をカスタマイズします。
WordPressの抜粋をカスタマイズ
まず、抜粋の定義について再確認しておきます。
前述のthe_excerpt()
は投稿画面の抜粋欄に入力があれば、文字数に関係なく全文表示、ない場合は本文から自動抽出されます。
つまり、ここでいう文字数の制御は抜粋欄ではなく、本文抽出になります。
デフォルトの状態
素の状態のWordPressでは、文字数ではなく、55という単語数で制御が行われます。
このため、スペースで区切らない日本語では適切に制御できません。
WP Multibyte Patchを有効にする
日本語の場合はWordPresに同梱の「WP Multibyte Patch」を利用します。
このプラグインは日本語環境でメール送信・トラックバック受信・ピンバック受信やexcerpt関数などをうまく処理できるように修正してくれます。
サイト内の検索語句スペースも適切に扱ってくれるようなります。
抜粋に関してはデフォルトで2バイト対応の110文字となります。
WordPress Codex は、ウェブログシステム WordPress の公式オンラインマニュアル(ドキュメント)であり、WordPress 知識の百科事典を目指しています。 進化し続ける WordPress に合わ […]
抜粋の文字数を指定する
WP Multibyte Patchで指定する
抜粋の文字数を任意の値とするためには、プラグインで用意されるフィルタで指定します。
プラグインを直接編集する場合はwp-multibyte-patch.php
より下記のexcerpt_mblengthの値を任意の文字数に変更します。
(ファイル内をexcerpt_mblengthで検索するとすぐに見つかります)
// Do not edit this section. Use wpmp-config.php instead.
var $conf = array(
'excerpt_mblength' => 110,
functions.phpで指定する
ただし、上記のプラグインを修正する方法ではアップデートの際などにデフォルトに戻ってしまいます。
これを防ぐにはお使いのテーマのfunctions.php
に以下を追加します。
return 400の部分が文字数指定値です。
<?php //WP Multibyte Patchの文字数指定
function new_excerpt_mblength($length) {
return 400;
}
add_filter('excerpt_mblength', 'new_excerpt_mblength');
?>
※テーマ内で指定することでプラグインのアップデートの際にも対応できますので、こちらの方がお勧めです。
抜粋の文末を変更する
同じく、functions.php
にてWP Multibyte Patchをコントロールして抜粋文未を変更するバリエーションを紹介します。
抜粋末を「…」から「・・・」に変更
<?php //抜粋の文末変更パターン1
function new_excerpt_more($more) {
return '・・・';
}
add_filter('excerpt_more', 'new_excerpt_more');
?>
さらに抜粋末を【続きを読む】のリンクに変更
<?php //抜粋の文末変更パターン2
function new_excerpt_more($post) {
return '・・・'. '<a href="'. get_permalink($post->ID) . '">' . '【続きを読む】' . '</a>';
}
add_filter('excerpt_more', 'new_excerpt_more');
?>
モバイルとPCで抜粋の表示数を変える
最後にモバイルを判定するwp_is_mobile()
という関数でthe_excerpt()
で出力する抜粋の文字数を変えてみます。
<?php //モバイルとPCで個別に文字数指定
function new_excerpt_mblength($length) {
return ( wp_is_mobile() ) ? 50 : 500;
}
add_filter('excerpt_mblength', 'new_excerpt_mblength');
?>
上記はモバイルでは50文字、PCでは500文字という指定になります。
これは表示エリアの小さいモバイルでは抜粋の文字数を減らしたい、しかし、それではPCで間が抜けてしまうなんていう場合に使える小ネタです。