WordPressハックカテゴリーの投稿

2007-10-21
晴れ

携帯電話でログイン状態をどうやって保持するか

ゆりこ による 2007-10-22 00:14:52 の投稿
カテゴリー: WordPressハック

携帯電話閲覧プラグインにウェブログ管理機能を付けようと考えていますが、かなりの難題となりそうです。

まず、i-mode でクッキーが使えないのが一番のネックです。つまり、ログイン状態の保持を URI 文字列で行なわないといけないわけです。といって、PHP のセッション機能も使えません。PHP には、URI にセッション ID を埋め込む機能がありますが、いまどきのサーバーでは使用禁止になっています (php.ini で session.use_only_cookies =1 になっている) 、スクリプトから一時的に有効にするのも無理です (.htaccess を使うしかない)。[追記] session.use_only_cookies は ini_set を使えばスクリプト中で動的に変更できました。

大体、PHP のセッション機能はサーバーによって設定がさまざまなので、OSS で配布するソフトで安全にかつ確実に使うのは無理があります。WordPress も、PHP のセッション機能は使わず、ログイン情報はクッキーに保存しているだけです。余談ですが、WordPress は、ユーザー名を平文、パスワードを md5 を2回掛けたものを記録しているので、管理画面を閲覧するたびに、md5 されたパスワードを毎回サーバーに送信していることになります。なんか怖い……。

PHP のセッション機能が使えないとなると、セッション機能を自前で実装するか、ユーザー名・パスワードをハッシュ化したものを URI に埋め込むしかありません。前者は、セッション情報はファイルで保存するとき、「安全にファイルを保存する場所が見つけにくい」という面が難問です (プラグインのディレクトリ配下では危険すぎる)。public_html 以外に Web サーバーから書き込めるディレクトリを作ってもらって、そこに保管すれば比較的安全ですが、プラグインのインストールが極めて困難になります。後者は言うまでもなく危険です。

あ、セッション情報をファイルじゃなくてデータベースに保存すればいいことに気がつきました。これならば安全に作れますね。ただし、データベースの内容が汚れてしまいますが ;-)

2007-10-19
くもりのち雨

絵文字・ページ分割対応の WordPress 向け携帯電話閲覧プラグイン Ktai Style 0.92 リリース

ゆりこ による 22:20:05 の投稿
カテゴリー: WordPressハック
タグ: , , , , , ,

最近のウェブログ記事がこればっかりの気がしますが、WordPress 向け携帯閲覧対応プラグイン「Ktai Style」の新バージョン 0.92 をリリースいたします。主な修正点は以下の通りです。プラグインの詳細は配布サイトをご覧ください。

  • サンプルテンプレートを添付しました。
  • archive.php (年月アーカイブ等の表示) において、ポップアップ (ドロップダウン) メニュー式ページナビゲーションを導入しました。何十ページでも一挙に移動できます。
  • alt=”” 指定された画像や 1×1 ピクセルの画像 (アフィリエイトやレイアウト調整用) はリンクせず無視するようにしました。
  • del 要素はテキスト自体を削除するようにしました (多くの端末では取り消し線はサポートされず、del 要素かどうか区別が付かないため)。
  • i モードの場合、外部サイトへのリンクを削除ではなく、フルブラウザでの閲覧リンクと設定できるようにしました。
  • EM・ONE の Internet Explorer も携帯電話として認識するようにしました。
ダウンロード: ktai_style092.tar.bz2 (48.6 KB)
※2007-10-20 16:50 にアーカイブを差し替えました。ソースファイルのバージョン番号が「0.92-beta」のままだったのを「0.92」に直したものです。

バージョン0.93をリリースしました。

今回の目玉はサンプルテンプレートの追加とナビゲーションの改善です。附属テンプレートは改造しにくい構造のため、改造しやすいシンプルな記述のものを添付しています。また、年月アーカイブで、月始めの記事を探すのが手間なので、ポップアップ (ドロップダウン) メニューを追加しました。あと、i モードで携帯ブラウザからフルブラウザを起動する方法も判明したので、それを実装しています。ソフトバンク端末では、仕様書を見てもやり方が不明なので、まだ実装していません。

今回悩んだのは wp_kses() 絡みでした。これを通して不要なタグや属性を削除させると、wp-smiley の alt 文字列が消えてしまったのです (0.91 に存在するバグです)。これは、「許可したプロトコル (スキーム) 以外を削除する」という機能の副作用です。wp-smiley の alt 文字列は「:smile:」などとなっているので、これをスキーム文字列と認識して消してしまうのです。このため、kses.php を複製してプロトコル削除をしないようコード修正したものを使うことにしました。

今後は、ウェブログ管理機能の開発に専念することとして、セキュリティホール修正やバグフィックス以外では 0.9x 系統のリリースは控えることとします。なお、ウェブログ管理機能がつけば、テンプレート仕様が多少変更される可能性はあります。

2007-10-11
晴れ

絵文字・ページ分割対応の WordPress 向け携帯電話閲覧プラグイン Ktai Style 0.91 リリース

ゆりこ による 23:09:52 の投稿
カテゴリー: WordPressハック
タグ: , , , , , ,

しばらく忙しくて、ウェブログのネタは豊富なのに更新ができていませんでした。でもプラグインの開発は進んでおりまして、このたび、WordPress 向け携帯閲覧対応プラグイン「Ktai Style」の新バージョン 0.91 をリリースいたします。主な修正点は以下の通りです。プラグインの詳細は配布サイトをご覧ください。

  • 各記事のコメントとトラックバック・ピンバックも分離できるようにしました。
  • サムネール画像に元画像のリンクが設定されている場合、元画像へのリンクを付与するようにしました。
  • ページ分割をより自然になるよう改善しました。
  • ウィルコム端末で、できるだけウィルコム独自の絵文字を使うようにしました (対応する絵文字がない場合は従来通り i モード互換絵文字)。
  • W-ZERO3 は絵文字非対応っぽいので、ウィルコムではなく「その他」端末として認識させるようにしました。また、ドコモ htcZ 、ソフトバンク X シリーズも携帯電話向け出力を行うようにしました。
  • 携帯電話の機種名を取得・表示できるようにしました。
ダウンロード: ktai_style091.tar.bz2 (39.6 KB)
新バージョン 0.92 が出ています。

派手な機能追加はないですが、各機能をブラッシュアップしています。それでも、併用しているプラグインによっては不具合が出るかもしれませんので、問題があればご報告をよろしくお願いいたします。

2007-10-03
晴れ

絵文字・ページ分割対応の WordPress 向け携帯電話閲覧プラグイン Ktai Style 0.90 リリース

ゆりこ による 23:12:51 の投稿
カテゴリー: WordPressハック
タグ: , , , , , ,

WordPress 向け携帯閲覧対応プラグイン「Ktai Style」の新バージョン 0.90 をリリースいたします。主な修正点は以下の通りです。プラグインの詳細は配布サイトをご覧ください。やっとページ分割機能を作り込みました。

  • ページ容量が大きい場合、5KB〜30KB ごとにページ分割するようにしました。
  • au、ウィルコムの場合に外部サイトへのリンクを残せるようにしました。
  • Ultimate Tag Warrior 等、プラグインのアイコンは、画像へのリンクとせず alt 文字列の表示としました。
ダウンロード: ktai_style090.tar.bz2 (34.7 KB)
新バージョン 0.91 が出ています。

ついに、ページ分割機能を作り込みました。端末の能力に応じて5KB〜30KBで分割します。FOMA, SoftBank 3G は 30KB でも大丈夫そうですが、夜中などネットワークが混雑しているときはページ表示がなかなか完了しないので 10KB にしています。

なお、XHTML タグ自体は分断されないようにしましたが、タグの中身は切れるかもしれません (「<a href=”http://example.jp/”>めちゃめちゃ長い長いリンク文字列</a>」において、リンク文字列の途中で切れる、など)。これは、p や div など長い文章を含む XHTML 要素においては、中身を分割しないとどうしようもないためです。このへんは、ヨソの携帯電話向け変換サービスにはまだまだかないません。今後の改良が必要でしょう。

外部サイトへのリンクですが、au の場合は PC サイトブラウザを起動するリンクにし、ウィルコム・その他の場合はそのまま表示というオプションを設定しました。ドコモ・ソフトバンクの場合は、携帯電話ブラウザからフルブラウザーを起動する方法が存在しないようなので、外部リンクは削除となります。

あと、Sa・Ga さんが暗に要望していた「プラグインのアイコンの処理」ですが、alt 文字列を表示させる (==アイコン画像をリンクにしない) という方向で実装しました。

これで、携帯閲覧対応プラグインとしては、最低限必要な機能を盛り込んだことになります。比較的短期間で開発できたのは、既存ソフトウェアの実装を参考にできたからです (ソースコード自体は取り込んでいませんが)。開発者のみなさま、ありがとうございます。ひとまずはこのまま様子を見て、少しずつ改良していく予定です。そして、平行して、ウェブログ管理機能をどう実装するか研究してみます。

[追記] ウェブログ管理機能以外の機能追加は以下のような腹案があります。

  • 各記事において、コメントとトラックバック・ピンバックの分離表示機能。(PC 向け表示で分離するプラグインを入れている人がけっこう多いようなので)
  • 大きい画像の縮小表示/画像のインライン表示。
  • 携帯絵文字を PC 向け表示でも表示させる (← GPL な携帯絵文字を作らないといけない)
  • ウィルコムの絵文字は、ドコモ互換文字コード以外にウィルコム独自文字コードの絵文字もあるので、そちらも実装する?
  • 携帯サイトの URL を PC 向けと分離することも可能とする (例: http://example.jp/ に対して http://example.jp/m/ を携帯サイトとする)。
2007-09-30
雨

絵文字対応の WordPress 向け携帯電話閲覧プラグイン Ktai Style 0.83 リリース

ゆりこ による 17:15:35 の投稿
カテゴリー: WordPressハック
タグ: , , , , , ,

WordPress 向け携帯電話閲覧プラグイン「Ktai Style」の新バージョン 0.83 をリリースいたします。主な修正点は以下の通りです。プラグインの詳細は配布サイトをご覧ください。5KB ごとのページ分割機能はまだ作っていません。

  • 最新のコメント一覧が表示できます。
  • 設定画面を用意しました。ただし、設定できる内容は Mobile Eye+ と異なります。
  • 日付表示で、今年と同じ年ならば年を省略、今日と同じ年月日ならば日付を省略するようにしました。
  • 他プラグインで携帯電話出力か確認できるよう is_mobile() 関数を定義しました。
  • 画像に class="ktai" が付与されている場合はそのまま表示させるようにしました。
ダウンロード: ktai_style083.tar.bz2 (28.1 KB)
※2007-10-03 19:40追記: SourceForge.jp の不具合でダウンロードできなかったのを調整しました。

→ページ分割機能を実装したバージョン 0.90 をリリースしました。

ふと思いついて、最新コメント一覧表示を実装してみました。ただし、実装のためにはデータベースを直接読み出しています。今まで作った機能は WordPress の API を使えばよかったのですが、最新コメント一覧を読み出すような API はないのです。

そして、設定画面も作りました。これで、文字色の日付書式を一括して設定できるようになりました。これらは、複数のテンプレートに同じ値が書き込まれているため、色や書式を変えるためにはそれぞれのテンプレートを全部変更しなければなりません。それは不親切だと思ったので、設定画面を用意したわけです。これにより、フロンページ (トップページ) で、最初の記事の本文を出すかタイトル一覧のみとするかも、設定で変更させるようにしました (よって xx_home.php は廃止)。

しかし、Mobile Eye+ での設定項目は1つも用意しませんでした。テーマは1種類しかないし、表示コメント数は、5KB ごとのページ分割機能を作ればページサイズ一杯まで表示すればいいでしょう。省パケ機能はデフォルトで実装した方がいいし (全角カナ→半角は除く)、パーマリンクはウェブログの設定値と同じにするべきです。外部ゲートウェイは使いたくありません。本文中の画像はリンクにするべきで (ただし、個別にインライン表示を可能とした) 、画像へのリンクも削除が適切でしょうし、画像のリンク名は ALT でいいし、スマイリーは絵文字に変換しています。このように、設定変更できた方がいい項目は何1つないと思っています (まおうさんとのセンスの違いですね)。とはいえ、画像へのリンク名は、ファイル名にしたい人もいるでしょうし、何も表示しないのがいいという人もいるかもしれませんね。これは設定項目として入れるかどうか検討してみます。

なお、余談ですが、Mobile Eye+ から接続する外部ゲートウェイのうち2つがポルノサイトの広告を掲載しているのは、気になっているところです。このため、万人に安心して Mobile Eye+ をおすすめできるとは言い難い状況です。

2007-09-28
晴れ

絵文字対応の WordPress 向け携帯電話閲覧プラグイン Ktai Style 0.82 リリース

ゆりこ による 11:17:18 の投稿
カテゴリー: WordPressハック
タグ: , , , , , ,

WordPress 向け携帯電話閲覧プラグイン「Ktai Style」の新バージョン 0.82 をリリースいたします。主な修正点は以下の通りです。プラグインの詳細は配布サイトをご覧ください。当初予定ではページ分割機能ができたら 0.90 としてリリースする予定でしたが、けっこう大変そうなので、それ以外に実装できたものを 0.82 というバージョン番号で先出しすることにしました。

  • 検索フォームに対応しました。
  • WordPress 内蔵のスマイリーは携帯電話絵文字に変換して表示させるようにしました。
  • <!–nextpage–> を使った投稿でも正しく表示されるようにしました。
  • ページ内リンク (<a href=”#top”> のような # を使ったリンク)、mailto:, tel: スキームを使ったリンクを削除せず残すようにしました。
ダウンロード: ktai_style082.tar.bz2 (24.8 KB)
→最新コメント表示機能と設定画面を装備したバージョン 0.83 をリリースしました。

検索フォームの実装は難しいと思ったのですが、Mobile Eye+ と同様なアドホックな実装法を取ることにしました;-) 具体的には、プラグインがロードされた時点で、ks というクエリー文字列があれば文字コード変換して $_GET['s'] に入れてしまうという方法です。stripslashes() してから mb_convert_encoding() したのち add_magic_quotes() するのが正しい気もしますが「表示」とかの検索文字列でも問題なく動いているので、現状の実装でよいのかも??

WordPress 内蔵のスマイリーも、img 要素に wp-smiley というクラスがあるかどうかという判別方法は Mobile Eye+ と同じです。まおうさんありがとうございます。

これで、Mobile Eye+ と機能的にはほぼ同等になったと思います。設定変更画面はありませんが、今のところ、設定決め打ちであまり問題ないと思っていますので、ご了承ください。

2007-09-27
晴れ

WordPress 用 Google Maps プラグイン Lightweight Google Maps 1.10 リリース

ゆりこ による 03:16:14 の投稿
カテゴリー: WordPressハック
タグ: , , , ,

WordPress 用 Google Maps プラグイン「Lightweight Google Maps」のバージョン 1.10 をリリースします。プラグインの詳細は配布サイトをご覧ください。主な修正点は以下の通りです。

  • WordPress 2.3 に対応しました。そのかわり、2.0.x 以前では動かなくなりました。
  • ページテンプレートを修正しなくても、カテゴリー絞り込みメニューと地名検索フィールドが表示されるようにしました。
  • 設定画面の場所を、オプション→Google Maps からプラグイン→Google Maps に移動しました。
ダウンロード: lw-google-maps110.tar.bz2 (21.9KB)
バージョン 1.20 をリリースしました。

実は、バージョン1.10 は4月には作っていたのです。カテゴリー一覧メニューを出す API が WordPress 2.1 から変更され古い API が非推奨になったため、両方の API が使える間にリリースしようと思っていたのに、うっかり忘れていました。古い API を削除した WordPress 2.3 が出てしまったので、やっと重い腰を上げた次第です……。

[追記] バージョン 1.01 も WordPress 2.3 で動きます。動かないと思ったのは勘違いでした。でもまあ、ページテンプレートの修正をしなくていいのは楽なので、新規に導入する方は 1.10 を使ってください。

WordPress 2.3 を試験導入失敗→その後成功

ゆりこ による 00:53:48 の投稿
カテゴリー: WordPressハック

エラー画面

きのうリリースされた WordPress 2.3 本家版を試験導入してみましたが、データベースのアップグレードに失敗しました。Yuriko.Net 旅行記のデータベースをまるごとテストサイトに複製して、アップグレードスクリプトを動かしてみましたが、画像のようなエラーが出てしまいました。エラーが出ているのに「完了しました」という表示をするのはダメですよね……。カテゴリーがタグ化されたのですが、そのへんの変換がうまくいかなったようです。post2cat テーブルは手作業で修正しまくっているので、もとのデータベースに問題があったのでしょう (投稿ID 3467 にカテゴリー ID 57 を割り当てる行がダブってたと思われます)。


phpMyAdmin 画面

データベースエラーが出たため、一部のテーブルは内容が完全に消えてしまっています (phpMyAdmin 画面を参照)。wp_users の内容が空なので、管理画面へのログインができません。

WordPress 向けプラグインはいくつか作っているので、その動作確認のため、新バージョンのテスト導入は必要不可欠なのです。本番サイトの WordPress 2.3 移行もにらんで、データベースを複製してのアップグレードに挑戦しましたが、これが失敗したのは残念です。プラグインの動作確認のためには、WordPress 2.3 を新規インストールして、そちらで行うことにします。そして、WordPress 2.3 のアップグレード失敗の原因を調査して、こちらも再度挑戦としましょう。

[追記] wp_post2cat テーブルの重複している行を削除すれば、問題なくアップグレードできました。日本語リソースもすばらしい出来で、WordPress ME の出る幕がなくなってしまいそう……。

2007-09-24
くもり

絵文字対応の WordPress 向け携帯電話閲覧プラグイン Ktai Style 0.81 リリース

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

きのう出した 0.80 はバグが多すぎるので、WordPress 向け携帯電話閲覧プラグイン「Ktai Style」の新バージョン 0.81 をリリースいたします。主な修正点は以下の通りです。プラグインの詳細は配布サイトをご覧ください。0.80 についてバグ報告を頂いた Sa・Ga さんには深く感謝いたします。

  • フロントページを記事一覧だけのスタイルにできる xx_home.php を添付しました。(home.php にリネームして使うこと)
  • コメント一覧/コメント投稿フォームのテンプレートを合体して comments.php にしました。WordPress 標準に近い型式となりました。(0.80 のテンプレートはアドホックで汚なすぎ!!)
  • パーマリンク構造がデフォルトの場合、コメント閲覧・投稿ができない不具合を修正しました。
  • ホスト名直下に WordPress をインストールしている環境でコメント投稿できないことがある問題を修正しました。
  • コメント一覧でも外部サイトへのリンクを除去するようにしました。

ナイトリービルドの状況になっていますが、次に実装予定の、5KB ごとのページ分割機能と検索フォーム設置は実装が比較的困難と予想されるので、リリースまで時間がかかるでしょう……。

ページ分割機能ですが、今のところ、index.php, page.php, single.php に <!–start pager–> と <!–end pager–> という記述を入れて、これらで囲まれた範囲をページ分割対象にする実装を検討しています。こうすれば、全ページに共通なヘッダー・フッターは分割されたページすべてに出すことができます。問題は、XHTML タグの途中で分割された場合の処理と、分割されたページの URL をどうするか、です。前者は WordPress にある balanceTags() 関数が使えれば簡単に実装できそうです。後者は、クエリー文字列として ?ktai_paged=nn という方向にしようかと思っています。

実は難しいのが検索フォームです。WordPress 標準では、http://example.jp/s=XXXX とすれば、XXXX という文字列で検索した結果を表示します。XXXX が日本語の場合は UTF-8 でエンコードされるのが基本なので、Shift_JIS を使う携帯電話ページでは、そのままでは検索フォームを設置できません。ks=XXXX というクエリー文字列を発行して、エンコード変換して s=XXXX に直してリダイレクトすれば単純ですが、端末によっては「ページが移動しました」という表示が出てかっこ悪いです。

したがって、ks=XXXX というクエリーを発行して、直接検索結果が表示されるのが美しい実装となります。しかし、その場合、WordPress の URL 解釈機構に割り込まないといけません。WordPress の内部を解析して、どうすればよいか考えてみます……。

[追記] 検索フォームを実装したバージョン 0.82 をリリースしました。

2007-09-23
くもり

絵文字対応の WordPress 向け携帯電話閲覧プラグイン Ktai Style 0.80 リリース

ゆりこ による 22:51:30 の投稿
カテゴリー: WordPressハック
タグ: , , , , , ,

きのうに続いて、WordPress 向け携帯電話閲覧プラグイン「Ktai Style」の新バージョン 0.80 をリリースいたします。主な修正点は以下の通りです。プラグインの詳細は配布サイトをご覧ください。

  • コメントの閲覧・投稿に対応しました。
  • パスワード付きの投稿に対応しました。

以後、機能実装に関する裏話を書きます。

まず、パスワード付きの投稿への対応ですが、WordPress コアではクッキーにパスワードを保存しているのに対し、本プラグインではパスワードを都度確認させることにしました。そのため、入力フォームの送信先は wp-pass.php ではなく、そのページ自身に変更しています。そして、コメント閲覧・投稿するときは hidden フォームにパスワードを入れてページ遷移することで、パスワードの再入力を回避しています (当然、セキュリティーは落ちます)。こういう実装のため、the_content() へのフックでは実現が無理で、ks_content() タグを復活させました。

なお、WordPress の実装がまずいのか、投稿パスワードに「\」(バックスラッシュ、環境によっては円記号) を使ってしまうと認証されないようですが、本プラグインではちゃんと通ります;-)

コメント閲覧・投稿は、WordPress 本体の実装が、single.php 等で comments_template() を呼び出すという形しか想定してなくて、コメント閲覧・投稿ページを独立させるのが困難でした。けっきょく、WordPress コアのファイルをコピーして改造する形で実装しました。tags.php ファイルがかなり膨らんでいます……。

あと、WordPress の実装に問題があることに気がつきました。それは、パスワード付きの投稿へのコメントは、パスワード認証してなくても受付されてしまう動作です。通常は、認証してないと投稿フォームが出ないため投稿できませんが、特殊な方法で無理矢理コメントすれば受付されてしまいます。バグ報告するべきか。

[追記] 0.80 はバグ多いため、バージョン 0.81 をリリースしました。