【至急・重要】ウィルスチェックのお願い

Change Style


WP: 抜粋表示時の全文出力を修正

テンプレートタグ the_excerpt() を用いた抜粋表示時に、タグ抜き全文表示されてしまう問題に対して、jam さんの「アジア圏テキスト対応パッチ」を手作業で当てたときのメモ。
作業対象は WordPress ME 2.0.4。

追記 inoccoさんが ME2.0.5用パッチを配布されています。 :-D Numb. » WordPress ME2.0.5 アジア圏用パッチファイル

いきさつ

問題点

図1: ME2.0.4
ME2.0.4による抜粋表示

日本語のように単語間がスペースで区切られない言語の場合、記事本文を抜粋表示する the_excerpt() を用いたとき、抜粋表示オプション欄を入力していない記事については HTML タグを取り除いた全文が出力されてしまう(正確には、英単語などがある程度混ざれば途中で切れる)。(図1)
私はほとんど当該オプションを入力していないので、アーカイブページで抜粋表示をしようとして困った。*1

従来の対処

この問題を解決してくれるのが、jam さんによる「WordPressのアジア圏テキスト対応パッチ」
なのだが、当時はパッチの当て方が分からなくて、抜粋処理を適当に組んで*2 アーカイブのリスト表示などに使ってきた。

図2: 見苦しいよ
自前コードによる抜粋表示

しかし、WordPress を使うにつれ、本文にテンプレートタグ・markdown・デコード・脚注プラグイン等の HTML タグ以外のマークアップが増える。そして抜粋文中にそれらのマークアップが散見され、見苦しくなってきた。(図2)
これらのプラグインは大抵 the_excerpt() にも適用されるよう作られているが、私が勝手に作った抜粋コードに適用されるはずもなく、プラグイン等によるマークアップが残ってしまうのだ。*3

正統派対処

そこで再び jam さんのサイトを訪れ、Kairaさんのサイトで、jam さんのパッチを ME に当てられるようにひろまささんが修正してくださったものを配布 、しかも Windows でのパッチの当て方までガイドしてくださっている記事にたどり着く。(*☆▽☆*)

しかし、WordPressME 2.0: 以下のファイルを使用します。(バージョンに要注意) と書かれている。
今のバージョンに当てられるかをお尋ねしてみようか。。。ご迷惑かな。。。と迷いつつ diff ファイルの中身を見てみると、どこかで見たような…… そう、Codex の差分だ。(diff について調べる。)なるほど、diff とはそういうものであったかー。(最初に調べるべし。)

とういうことで、勉強がてら、ME 向けの diff ファイルを見ながら手作業で修正を加えることにした。

パッチ配布ページ

jamさん、Kairaさん、ひろまささん、ありがとうございます。 :-)

修正箇所

  • ME2.0 向け diff ファイルを参照しながら手修正。行のズレや ME2.0.4 との違いは目視で確認。
    • wp-includes/comment-functions.phpfunction get_comment_excerpt()
    • wp-includes/feed-functions.phpfunction the_content_rss()
    • wp-includes/functions-formatting.phpfunction wp_trim_excerpt()
    • wp-includes/functions-post.php
      • function trackback_url_list
      • @@ -707,7 +707,7 @@ の方(function do_trackbacks())は、修正前コードが ME2.0 と ME2.0.4 とで異なったため、修正を保留。詳細は下記「残作業」参照。
    • wp-includes/functions.php
    • wp-trackback.phpfunction trackback_response()
  • テーマディレクトリ内のアーカイブページ用 php の抜粋表示処理を、自前のものから テンプレートタグ the_excerpt() へ変更。

結果

図3: 満足 :-)
diff 手修正後の抜粋表示

  • アーカイブページはほぼ正常表示になった。(図3)
  • TOC 挿入コード <!--TOC--> が生で表示されるが、目次に変換されると文字数を食うから、このままにしておく。挿入コードを抜ければベストかな。
  • タグアーカイブページでは、自前の抜粋処理では何も出力されなかった*4 が、the_excerpt に変えたら抜粋表示されるようになった。
  • RSS フィードと TB は元々抜粋できていたが、今回の作業後も抜粋できている。作業前後の変化の有無は不明。。。

残作業

  • wp-includes/functions-post.phpfunction do_trackbacks()(diff の @@ -707,7 +707,7 @@ の方)
    ME2.0 向け diff ファイルの修正前コードと、ME2.0.4 のコードが異なったため、修正を保留中。
    • 本家 WP2.0 修正前は substr() を使用。
    • ME2.0 修正前は mb_substr() を使用。
    • ME2.0.4 では、mb_strcut() が使えればこれを、なければ mb_substr() を使用する処理になっている。
  • 1.5 patch (2006-2-5) — WP 2.0.1 向けパッチ。1.4 patch との違いを確認の上、必要に応じて追加修正。
  • さらに WP バージョンが上がっているので、ME 2.0.4 でもこれらの対応で OK か確認。
  • jam さんの処理を WP 本体に取り込んでもらうのはダメなのかなあ。私のような初心者ほど戸惑うと思うので、せめて ME だけでも。。。
  1. WordPress ME では、フィードとトラックバックの抜粋には対応済み。だが、the_excerpt() には対応していない(なぜ?)。また、Search Excerpt WordPress Plugin でも the_excerpt() を使うが、プラグイン側に jam さんのロジックが組み込まれていているので問題が生じない。 [back]
  2. DB に保存されている記事本文から HTML タグを取り除いて文字数でカット。パスワード投稿には対応。←変なところで凝る性格。 [back]
  3. 特に、冒頭に脚注を入れると抜粋がそれで埋め尽くされてしまう勢いなので、なるべく冒頭に脚注を入れないようにする等、気も遣う。 [back]
  4. $post ではダメらしくて。if 文で使いたい $post->フィールド名 が引き続き無効。何なら使えるんだー。(・;) [back]

YOU、これも読んじゃないなYO!

  • No Related Posts

コメントをどうぞ