Yuriko.Net 個別記事

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月上旬まで伸びてしまうかも。

トラックバック・コメント »

  1. すいません m(_ _)m携帯でコメントをすると 無効なエラーを受信しましたと出るのですが Verは最新です。

    KIMKIMからのコメント
    • 携帯でコメントをすると 無効なエラーを受信しましたと出るのですが

      これだけでは情報が少なすぎてよく分かりません。携帯電話の機種と、当該サイトの URL を出していただければ調査可能です。URL が出せないならば、サーバーの PHP バージョン、WordPress バージョン、他に使っているプラグインの一覧を提供して頂けないでしょうか。
      おそらく Ktai Style のバグだと思うんですが、こちらでは再現できないので、それを突き止めるためにはご協力をお願いいたします。

      • 情報が少なくて大変もうしわけないです。下記に表示します。
        携帯電話は SH905iです
        OS:Unix(SUN Solaris)
        PHP:利用可能(バージョン5.2.1)
        CGI:利用可能(Perl5.8.4)
        ASP/JSP:利用不可
        データベース:MySQL(4.006)
        PluginはEvermore 携帯表示 SEO Title Tag Smart Update Pinger Ultimate GA XML-Sitemap AdSenseDeluxe
        です。
        以上すいませんがよろしくお願いします。

        KIMKIMからのコメント
  2. 横からですみません。
    KIMKIMさんのページにDM001SHコメントしたところ以下のエラーが表示されました。
    Internal Server Error
    とりあえずご報告まで。
    yurikoさんへ
    前から考えていたことですが、コメントしたときに使用した携帯端末が表示されるととても便利だと思いますよ。特に多くの端末のユーザーを持っていると、コメントで使われた端末が気になるときがあります。一度ご検討していただけませんか?

    ぴいからのコメント
    • KIMKIMさんのページにDM001SHコメントしたところ以下のエラーが表示されました。
      Internal Server Error

      ひょっとすると、PHP を CGI 動作させていますでしょうか? その場合、php ファイル先頭に PHP へのパスを書かないといけないかもしれません (#! /usr/bin/php など)。ISP の提供するドキュメントやサーバー管理者に質問してみてください。

      前から考えていたことですが、コメントしたときに使用した携帯端末が表示されるととても便利だと思いますよ。

      WordPress の管理パネルでは、そもそもユーザーエージェントが見えないんですよね……。phpMyAdmin 等で wp_comments テーブルを見れば、記録されたユーザーエージェントが確認できるので、携帯電話の場合は機種も分かります (au の場合はデバイス ID になってしまいますが)。現状、ユーザー ID ないし端末製造番号を表示するようにしているので、そこに機種名を出すことはそんなに難しくはありません。次期マイナーアップデート (1.50 ないし 2.0.0) で検討してみます。1.41 はバグフィックスレベルのため取り入れられそうにないです。

      ゆりこからのコメント
      • 早急のご返答ありがとうございます!!
        PHPですが返答内容どおりCGIで動かしております。
        ちんなみにPHPのパスはKtaiStyleのどこの記述に加えればよろしいのでしょうか?

        KIMKIMからのコメント
        • KIMKIMさん:

          PHPですが返答内容どおりCGIで動かしております。

          よく考えると、PC からのコメント受付スクリプト wp-comments-post.php は問題なく利用できているんですよね。wp-content/ 配下だと直接呼び出せないような設定がされているのかもしれません。おそらく .htaccess を設定されているでしょうから、その記述内容を教えてください。

          PHP のパスを書くとすれば、直接呼び出されるファイルである comments-post.php, login.php, redir.php の3つが対象で、その先頭行です。それ以外のファイルはそのままで OK です。

          ゆりこからのコメント
        • KIMKIM さん:

          PHPですが返答内容どおりCGIで動かしております。

          ひょっとすると、ファイルに実行権限がない (パーミッションが 705 や 755 になってない) のかもしれません。comments-post.php, login.php, redir.php, wp-admin/*.php について、実行権限を付与してみてください。

上に戻る

※スパム対策プラグインの影響により、すぐにトラックバックが反映されない場合があります。お手数ですが、半日ほど待ってみてください。

コメント投稿

※発言の責任を明確にするため「名無し」「通りすがり」「匿名希望」等の匿名は不可とします。捨てハンドルでもいいので必ず名乗ってください。
XHTML (使えるタグ): <a href="" title="" ktai=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt=""> .
※スパム対策プラグインの影響により、すぐにコメント内容が表示されない場合があります。お手数ですが、半日ほど待ってみてください。

上に戻る