カテゴリー
WordPressカスタマイズ

WordPressの自動抜粋の文字数とリンク文字の変更

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で間が抜けてしまうなんていう場合に使える小ネタです。

profile image

執筆:R3098

WEBサービス構築・監修が生業です。WordPress 関連では Aurora Heatmap などのプラグイン開発も行っています。サイト運営者の力になりたいと考えます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー および 利用規約 に適用されます。

reCaptcha の認証期間が終了しました。ページを再読み込みしてください。