
WordPressを使用したウェブサイトの場合、「コンテンツの一覧は◯◯文字、サイドバーのオススメ記事は◯◯文字」と、個別に抜粋を文字数指定したいことはよくあります。
WordPressには標準で抜粋を表示するthe_excerpt()という関数が用意されていますが、この関数は表示文字数の制限が引数で指定できないため、抜粋を表示する場所によって文字数の指定を行いたい時などに、そのまま使用することができません。
そこで今回、the_excerpt()の代わりとなる、個別に抜粋を文字数指定できる関数をご紹介します。
事前準備
『WP Multibyte Patch』プラグインのインストール
WordPressは標準のままだとマルチバイト文字の処理に関して一部不具合があります。
これから紹介するthe_excerpt()の代替オリジナル関数についても、マルチバイト文字の処理が記述されていますので、正常に動作させるには『WP Multibyte Patch』プラグインをインストールして、マルチバイト文字の扱いを最適化してください。
このプラグインは日本語版WordPressには元々入っているプラグインですので、既にインストールされている場合、有効化するだけでOKです。
もし日本語版WordPress以外を使用していたり、WP Multibyte Patchをアンインストールしている場合は、インストールを行い有効化してください。
the_excerpt()の代替関数の作成
functions.phpに以下のソースコードを記述してください。
function custom_excerpt($length = 110) {
global $post;
$suffix = '...';
$content = mb_substr(strip_tags($post->post_excerpt),0,$length);
if (!$content) {
$content = $post->post_content;
$content = strip_shortcodes($content);
$content = strip_tags($content);
$content = str_replace(' ', '', $content);
$content = html_entity_decode($content, ENT_QUOTES, 'UTF-8');
if (mb_strlen($content, 'UTF-8') > $length) {
$content = mb_substr($content, 0, $length, 'UTF-8');
$content .= $suffix;
}
}
return $content;
}
たったこれだけで、the_excerpt()の代わりとなる文字数を引数で設定できる『custom_excerpt()』関数が使用できるようになります。
また、特殊文字の処理もcustom_excerpt()には施されているため、the_excerpt()と違い、場合によって特殊文字の記述が一部表示されてしまう不具合が解消されています。
※custom_excerpt()はKOTORI blog様の以下記事の内容を参考にさせていただきました。
custom_excerpt()の使用方法
the_excerpt()を使用している箇所を以下に置き換えて使用します。
<?php echo custom_excerpt(); ?>
文字数を制限する場合、関数に半角数字で引数を設定します。例として、抜粋を30文字に制限する記述方法は以下となります。
<?php echo custom_excerpt(30); ?>

ホームページに動きをつける一歩目!JavaScriptの基本について
JavaScriptはブラウザ上で動作するプログラムことで、時間経過やクリックしたタイミングで画像やテキストを切り替える、ということを表現できるようになります。
custom_excerpt()の細かな仕様は以下の通りです。
- 引数を何も指定しない場合、WP Multibyte Patchが動作している状態でのthe_excerpt()と同じく、110文字の文字制限を行います。
- 文字数を制限するには、関数に半角数字で引数を設定します。
- 制限した文字数に達しない場合は、そのまま表示します。
- 制限した文字数以上の場合、文字数を制限した後、語尾に『…』が付きます。
- WordPressの抜粋を使用した場合にも関数の文字数制限は動作します。
語尾を変更したい場合、functions.phpの$suffixの値を変えることで対応可能です。
例. 語尾を…moreに変更
$suffix = "…more";
まとめ
サイトのデザイン上、ここはどうしても文字数制限したいということはよくあります。
当ブログでもそういった小さな、しかし妥協したくないこだわりがあったため、この関数を実際にいくつかの箇所で使用しています。
もし同じような悩みがございましたら、ぜひ使用していただければ幸いです。