wordpressで文字を抜粋してみよう

wordpressのカテゴリーやアーカイブ、トップページなど、いくつかの記事を並べて表示されるところで文字が抜粋されることがあります。wordpressの初期状態では抜粋されず、全文表示されるはずです。これは、デフォルトで一緒に同梱されている「WP Multibyte Patch」というプラグインを有効化しているためで、一定の文字数が抜粋されます。もちろん、抜粋するためのほかのwordpressプラグインを有効化していても同様となります。「WP Multibyte Patch」の場合、何も変更を加えなければ一応110文字となっていますが、この値は開発側で変更される可能性もゼロではありません。そしてこの抜粋の機能ですが、サイトのデザインや大きさなどの理由から、字数を減らしたかったり、増やしたかったりすることがあります。方法としてはいくつかあります。

そもそも「WP Multibyte Patch」とは?

マルチバイトは日本語のことです。wordpressはphpというプログラムで動いており、プログラムそのものは本来、日本語には対応しておりません。日本語でコードを記入することはできないのですが、出力表示するために日本語を取扱うことはできたりします。しかし、その際に不具合が出ることもあります。

「WP Multibyte Patch」はwordpressを利用する上でそういった不具合を解消するために開発されたプラグインのことです。基本的に文字化けや字数のカウントに関しての修正となります。これらがおかしくなるのは英語が一バイトであるのに対して日本語は二バイトや三バイト、或いはそれ以上を使って処理しているためです。

また、このプラグインのディレクト内にある「wpmp-config-sample-ja.php」というファイルを一旦ダウンロードし、「 /wp-content/wpmp-config.php」というパスで、かつ「wpmp-config」というファイル名に変えてアップロードすると字数を調整できます。ただし、このファイル内にある「$wpmp_conf['excerpt_mblength'] = 110;」と記述されている部分の「110」を希望の値に書換えてからアップロードして下さい。下で紹介しているwordpressのテーマのfunctionsで設定している場合、こちらの指定が適用されませんのでどちらか一方のやりかたを選んでください。ちなみに「wpmp-config-sample-ja」は以前だと「wpmp-config-sample」と表記されていたようです。

wordpressで抜粋が適用される部分は?

抜粋には「the_excerpt」というwordpress独自の関数が使われている部分に適用されます。例えば、wordpressのカテゴリーやアーカイブのページなどには大抵記述されています。逆にいえば「the_excerpt」が使用されていない方法で抜粋されているケースでは、「WP Multibyte Patch」をはじめとする他のwordpressプラグインでも抜粋に関わる表示方法を変えることはできません。

「the_excerpt」が無い所

そのときは、wordpressテーマ内などで該当するコードの部分をみつけだして、直接書換えます。下のコードだと$strに対象の文章が入っており、マルチバイトではphpのビルトイン関数であるmb_substrを用います。第二引数は開始位置。第三引数の長さは半角一文字、全角一文字でカウントされ、バイト単位ではありません。ここでは「10」を指定しています。「substr 」関数はマルチバイトに対応していないため、うまくカウントできません。ほかに「mb_strcut 」もありますが、こちらはマルチバイト対応ですが、文字単位ではなくバイト単位で処理するため、普通は用いません。

mb_substr($str, 0, 10);
mb_substr($str, 0, 10, 'utf-8');

「the_excerpt」がある所

以下のコードをwordpressテーマの「functions.php」へ記述すると動作します。

function mblength1($length) {
return 50; //抜粋する字数を50に設定
}
add_filter('excerpt_mblength', 'mblength1');

末尾への対応。「...」となっていますが、「続きを読む」でも構いません。末尾に追加するだけのものであるため、基本的に何でも構いません。

function excerptmore1($post) {
return '...'; //抜粋末尾の文字
}
add_filter('excerpt_more', 'excerptmore1');

moreを入れる

この方法は一記事ごとにwordpressの投稿画面で設定します。字数を記事ごとに設定できるため、区切りの良いとことで調整できますが、moreを入れてない投稿には適用されません。

Plugin

この手の抜粋Pluginは残念ながら、セキュリティの脆弱性が見つかっても放置されることが多いようです。アップデートや更新頻度も低く、最終的には放置されてしまうため、おすすめはできません。wordpressのPluginは基本的に簡単な構成なものほどほったらかしになるケースが多いようです。phpの使い手の誰もが簡単に作れるようなプログラムは、そうなりやすいのでしょう。逆に複雑な機能をどんどん追加していくようなものは、長期間に渡って開発が持続し、アップデートも頻繁に行われることが多くなっています。ただ、複雑であっても開発者のモチベーションが無くなれば、結局は放置されますが。これは無償でも有償であっても、同じことが言えます。

基本的にwordpressのPluginを自分で作れるなら、そうしたほうが早いです。作れないなら抜粋に関しては簡単なコードですので、wordpressテーマの「functions」へ直書きしたほうがはやいです。「functions」は個別のテーマ専用のPluginみたいなものですので。もちろん、wordpressの非推奨によって利用できなくなるワードプレスの独自関数もありますが、筆者の環境ではワードプレスのアップデートによっていきなりエラーを吐いたことはないです。偶然なのか、そうならないようなプログラムの組み方をワードプレス側でされているのか、調べてみたことはないのですが。

プログラムが動かなくなる原因でハッキリしているものとしては、phpそのもののバージョンアップがあります。こちらもワードプレスと同様に非推奨のプロセスを踏みますが、バージョンアップのタイミングでいきなり削除されます。削除されると動作しなくなりますので、使用するバージョンを変更するとワードプレス上でエラーが吐き出されるというわけです。もちろん使用するバージョンをサーバ側の管理パネルやhtaccessで変更しなければ、そういったことも発生しないのですが、ワープレ本体へそれに関わる変更が加えられると利用しているワープレテーマやPluginなどでエラーが発生してしまうケースも考えられます。最悪、ワープレブログが表示されないといったことも起こるかも知れません。

その点、ワープレテンプレートの「functions」ファイル内において自分でコードを管理している場合は、原因を特定しやすいです。他人の書いたものはそれを理解するのに時間がかかりますからね。また、様々な環境下で動作するように作られているのが普通であるため、複数のファイルを検証し、ファイル同士の関係や変数、関数などがどこからどこへ渡っているのか、ある程度理解しなければなりません。そうしなければ原因を特定できないからです。

まとめ

ワープレでの文章の抜粋、いかがでしたでしょうか。基本的にはカテゴリーやアーカイブなど、投稿一覧で抜粋されることが多いのですが、文章の抜粋であればコンテンツに限らず、タイトルでも可能です。その場合、mb_substrを利用します。また、themeを季節など、時期によって変えたいのであれば、こういった設定をプラグインにまとめてしまうのも一つの方法です。