WordPressの抜粋表示プラグイン「Thumbnail for Excerpts」が日本語対応じゃなかったので対応してみた

このブログはWordPressを使っている。プラグインもそれなりに充実しているし設定も簡単なので重宝している。
テーマはデフォルトのTwenty Elevenを使っているけれど、特に不満らしい不満はない。ただ、トップページ(Home)の表示が全記事表示になってしまっていて、長い記事を書くとかなりウザい状況になる。なので、記事の最初の方だけ表示する抜粋表示をするように調整するためのプラグインを探してみた。
いくつかある中で評判がよさそうだったのが「Thumbnail for Excerpts」というプラグインだったので、これをインストールしてみた。画像をアップロードしていると、最初の画像のサムネイルを入れてくれるみたいなので割と良い。私の場合、写真の記事も書いているので写真を掲載することも多いから、これが使えるなら大変便利だ。

ただ経験上、WordPressのプラグインは満足の得られる率が低い。特に多国語対応ができていない場合には良いプラグインでも使い物にならないという状況にすらなりかねない。まあその場合は泣く泣く他を当たるんだけれど……。
今回の「Thumbnail for Excerpts」がそうならないことを祈りつつ、インストール&設定、そして……。

ダメでした。

トップページを表示したら、ものの見事に全文表示。しかも、空白改行が全部削除されている。
抜粋表示機能は効いているのだろうけれど、うまく丸めが処理されていない。mb_substr()とか使ってプラグインを改良するしかないのかと思って、プラグインのソースをちょっと眺めてみた。
the_excerpt()関数をフックして処理しているらしいことをどこかのサイトで見たので、the_excerptで検索をかけて処理しているメソッドの位置を特定する。
位置が特定できたのでそのあたりをざっと眺めてみると、どうやら半角空白の数で処理している模様。

[php firstline=”342″]
$excerpt_length = 55;
$words = explode(‘ ‘,$content,$excerpt_length+1);
if(count($words) > $excerpt_length){
array_pop($words);
array_push($words,’…’);
$content=implode(‘ ‘,$words);
}
$content = ‘<p>’.$content.'</p>’;
[/php]

とまあ、こんな感じになっている。このあたりにちょっとした匂いを感じるではないか。

342行目が単語数で、55単語分を抜粋表示の対象としている、らしいと目星をつけてみる。
343行目は半角空白でexplode()しているので、単語ごとにブツ切りにして$words変数に配列化している。変数名がまさに物語っているのである。
345行目のif文で、まさに単語数チェックをかけている。55ワード以上あったら55ワード目には「…」を入れるという処理だ。
347行目で単語を半角空白でくっつけて再構成して、349行目で出力文字列として設定している。

といった感じなんだろうなーと思いながら、じゃあ日本語の場合は何で区切りますかねーということで考えた挙句に、読点じゃ無理が出そうなので句点にすることにした。つまり、1文まるごとである。英単語の場合と違って長さが文によってまちまちになるので、抜粋にムラが出そうであるが、イージーハックするだけなのでその程度で我慢しておこう。

[php firstline=”342″]
$excerpt_length = 5;
$words = explode(‘。’,$content,$excerpt_length+1);
if(count($words) > $excerpt_length){
array_pop($words);
array_push($words,’…’);
$content=implode(‘。’,$words);
}
$content = ‘<p>’.$content.'</p>’;
[/php]

というわけでこんな感じに、ほとんど何もhackなんてしてない状況。
342行の$excerpt_lengthは、今度は意味が変わって単語数じゃなくて文章数になる。
なので343行以降の$wordsの意味もおかしくなるのだが、いちいち変えるのもめんどくさいので変数名はそのままにしている。
343行目も、半角空白を句点(。)で置き換えている。
これで完了である。

実際にプラグインを有効化してトップページを見てみると、うまく機能しているっぽい。
たぶんもっとうまいスマートなやり方があるんだろうけれど、いちいちそこまで対応するのも面倒くさかったのでプラグインに簡単に手を入れて済ませる方法で終わりにしてしまった。

【2012/11/10追記】
結局私が借りているホスティングサービスではメモリ不足でこのプラグインが機能しない状態になってしまった。なんかいいプラグインを探すか別の解決策に依存するしかなさそうだ…。とほほ。

コメントを残す

メールアドレスが公開されることはありません。