2008年6月28日の投稿

2008-06-28
晴れ

mobile_same_url のフィルター関数置き場

ゆりこ による 02:46:13 の投稿
カテゴリー: WordPressハック
タグ: ,

Ktai Style 1.30 から、「PC 版ページの URL に携帯電話でアクセスするとモバイル版ページが出るブログサービスへのリンク」は中継ページを出さないようにしましたが、この「ブログサービスの一覧」は mobile_same_url フィルターを使えば編集できます。しかし、コードの不具合で、フィルター関数を my-hacks.php に置かなければなりませんでした。当初の予定では、携帯テーマの functions.php に置いても OK のはずですが、それでは動作しないという報告を受けてしまったのです。

いろいろ調査した結果、tags.php, shrinkage.php を早い段階で require してしまっているのが原因でした。mobile_same_url フィルターの適用は、shrinkage.php が require されたタイミングです。設計上は、template_redirect アクションによって、Ktai_Style::output() メソッドが実行された時点で tags.php が require されるつもりでした。

しかし、よくコードを見てみると、admin/class.php でも tags.php を require していました。admin/class.php は ktai_style.php の初期化段階 (WordPress コアによってプラグインがロードされた時点) で require しているため、結果として、shrinkage.php がプラグイン初期化時点で読まれていることになります。この時点では、携帯テーマの functions.php はまだ読まれていないので、当然そこにフィルター関数を書いても無効なわけです。

うーん。これは require じゃなくて require_once と書いていたために発見できなかった現象ですね。安易に once を使ったらダメということかもしれません……。この問題の調査には、報告者さんにもご協力頂きました。大変ありがとうございます。

当初の仕様と違っているため、admin/class.php で tags.php を取り込むのはやめて、class.php では tags.php にある関数群を使わないようにします。また、require_once は極力 require に直しましょう。それらの変更を行なった Ktai Style 1.41 は土日に出す予定ですが、テストがなかなか進んでいません。7月上旬まで伸びてしまうかも。