WordPressハックカテゴリーの投稿
2008-09-04
来たる9月23日(火)に、日本で初めてとなる WordCamp が東京で開催されます。WordCamp は日本ではあまり馴染みがないイベントですが、WordPress のコア開発者、テーマ/プラグイン開発者とユーザーが集まるカンファレンス、かつ、お祭りです。アメリカはもとより、世界各地で開かれています。アジアでは中国での実績があります。
過去には、WordPress Japan が主導して年1回オフ会が行なわれていましたが、今年はどうも開かれる雰囲気がありません。それならばいっそのこと WordCamp をやってしまおう、ということで Nao さんが中心となって準備をすすめられ、9月23日の開催が決まりました。急に出てきた話でまだ詳細は決まっていませんが、WordPress コニュニティーには優秀なメンバーが揃っていますから、当日までにはきっちりと準備できていることでしょう。
わたしも、携帯サイト構築の初歩についてプレゼンする予定です。15〜20分ぐらいの予定なので、あまり細かい話はできないと思います。
2008-09-02

Ktai Style 次期バージョンのベータ版 (その1) を配布いたします。あくまで製作中のバージョンのため、安定版である 1.43 で不具合が発生している方で、いち早く修正点を試してみたい方のみご利用ください。バージョン 1.43からの変更点は以下の通りです。
- EMOBILE H11HW, SONY mylo で閲覧したとき携帯向け表示をさせるようにしました (実機テストはしていません)。
- 外部サイトへのリンクをクリックしたとき、携帯サイトが存在するかの確認 (Mobile Link Discovery の検出) でタイムアウトしたり白紙画面になったりすることがある事象を改善しました。また、外部サイトの URI にポート番号を含む場合 (http://blog.example.jp:10080/ のような場合) に携帯サイトの検出ができるよう改善しました。
- a 要素で class=”pconly” というクラス指定をした場合、または、shrinkage.php の
$none_mobile_url および none_mobile_url フィルターで追加したサイトに対しては、Mobile Link Discovery の検出をせずにすぐ中継ページを出すようにしました。
- WordPress MU において、画像が表示されない/リンクにならない/wp-signup.php を実行したときに PHP エラーが発生するなどの不具合を改善しました。(注意: WordPress MU での動作を保証したわけではありません)
- 次の独自フィルターフックを追加しました: ks_login_logo
今回は外部サイトのリンクを辿るときに携帯サイトがあるかの確認 (Mobile Link Discovery の検出) で不具合があったため、その修正がメインとなっています (かるた無病息災さんとか、ソニ☆モバさんとか。@天然無能さんもこれが原因かも?) 。その他にいくつかコード改善を行なっていて、広くテストを募った方がよいと思って、1.44 正式版の前にベータ版を出すこととしました。
イー・モバイル H11HW は、画面が小さいことから携帯版を見せた方がいいだろうと思って、実機確認ができてないものの、対応させることにしました。どうやら絵文字も対応しているようなので、H11T と同じ処理でいけるはずです。SONY mylo も実機テストしてませんが、とりあえず対応機種に入れてみました。
携帯ログイン画面のロゴ変更ができるよう、独自フィルターフックを追加しています。これは WordPress 日本語フォーラムで要望されたので入れてみました。
WordPress Plugins/JSeries 用更新通知プラグイン「JSeries Notifier」のバージョン 0.8.2 をリリースしました。変更点は以下の通りです。
- WordPress 2.6 で動作しない不具合および、SourceForge.JP のデザイン変更によって動作しない不具合 (WordPress のバージョン問わず) を修正しました。
WordPress 2.6 で動かないという報告があったため、しばらく調査していました。その間に SourceForge.JP のサイトデザインも変更されてしまい、どの WordPress でもアップデート通知が効かなくなってしまったので、両方の修正を盛り込んだリリースとなりました。すなわち、今回のアップデートは JSeries Notifier での自動検出ができません。ということで、バージョン体系を x.yy から x.y.z という表記に変更しました。アップデート通知が有効な場合にこういう変更をすると、0.81 の方が 0.8.2 よりも新しいと判断されてしまうため、よくないですが、そうではないため問題ないわけです。
このため、WordPress 関連のサイト運営者のみなさんには、「JSeries Notifier がアップデートされたこと」を記事にして頂けると幸いです。
2008-08-14
WordPress のタグアーカイブ URL は複数タグが使えるのですが、それを工夫すれば「Ktai Style の最新版アナウンス」の URL を作れます。Ktai Style の記事にはすべて「Ktai Style タグ」 (URL のパス部分は /tag/ktai-style/) を付けているんですが、最新版のアナウンス記事に「最新版タグ」 (URL のパス部分は /tag/latest/) を付けると、これら組み合わせた「Ktai Style 最新版タグ」(URL のパス部分は /tag/ktai-style+latest/) が、最新版アナウンス記事を示すようになります。タグアーカイブの URL で、複数のタグをプラス記号 (+) で繋ぐことができるという機能のおかげです。
今まで、新バージョンが出たら、1つ前のバージョンのアナウンス記事から新バージョンへのリンクを張っていました。これだと、もっと古いバージョンの記事を見つけた人にとっては、1つずつ新しいバージョンを辿るしかなく、不便でした。「Ktai Style タグ」アーカイブを見る手がありますが、リリース案内以外に開発日誌っぽい投稿もあるので、最新版に案内するには不向きです。複数のタグを組み合わせたアーカイブ URL を使うことで、うまく解決できるのです。
もちろん、「Ktai Style 最新版」という名前のタグを作ってもいいんですが、それよりは「Ktai Style + 最新版」の方が汎用的です。後者だと「最新版」タグアーカイブを見れば、わたし作のプラグイン最新版が一覧できますから。
まだ「最新版」タグを付与しただけですが、今後、過去のリリース案内を「次のバージョンへのリンク」を「最新版へのリンク」に順次張り換えたいと思います。
本当はもっと前からこのテクニックを使いたかったのですが、「タグの重複問題」があったため、日本語タグにアルファベットのスラッグを付けることができず、あまり実用的ではなかったのでした。WordPress 2.6.1 からやっとタグスラッグがまともに使えるので、この方法が活用できるというわけです。
WordPress 用メール投稿プラグイン「Ktai Entry」のバージョン 0.8.7 をリリースいたします。変更点は以下の通りです。
- プラグインを無効化したとき、メール設定のパスワードを別途保管しておき、後で有効化したとき復帰させるようにしました (従来は、プラグインを無効化すると、メール設定のパスワードが初期化されていました)。
- ページキャッシュを行うプラグイン (WP-Cache, WP Super Cache) が有効な場合、外部メールボックスを読み出すトリガーとなるスタイルシートは常時表示させるようにしました。キャッシュが有効な場合、読み出し時間間隔を経過してスタイルシートを表示させるようにしても、実際のページ出力に反映されないことがあるためです。
- ログ機能のメッセージの日本語化を簡単に行えるようにしました。
- 管理パネルで「オプションの削除」を行ったとき、メールボックスの確認を最後に行った時刻を削除するようにしました。(従来は削除が漏れていました)
- post_name フィルターが実行されていない不具合を修正しました。
今回はバグフィックスなどの細かな修正です。特にプラグインを無効→有効にしたときに外部メールボックスのパスワードが消えてしまう仕様は分かりにくかったのですが、今回改善いたしました。またも、「今後の予定」に書いてある機能の実装が出来てませんが、そろそろ手を付けたいですね〰。
2008-08-13
WordPress 2.6.1 ベータ2 がリリースされていました (ベータ2日本語版も出てました)。「カテゴリー・タグアーカイブの URL が変わってしまう問題」や、「投稿を編集したときのタグ重複問題」(ベータ1は新規作成だけが改善されている!) が修正されています。
これで安心して使える感じでしょうか。今週中に正式リリースされそうですね。

iPhone/iPod touch ユーザー向けにルビー画像を表示するプラグイン「I am Richer」を作りました。PC や携帯では通常のウェブログ表示となりますが、iPhone/iPod touch で閲覧すると「世界で8人だけが購入したアレ」が再現されます
このプラグインは無償ですが、999.99 ドル (日本価格 115,000円) の寄付は歓迎いたします
寄付額は 7 割に切り詰めても構いません
;-) ※寄付希望者は別途お問い合わせください。
プラグイン作者は iPhone/iPod touch を所有していませんので、画面表示が最適かどうかはよく分かりません。http://iamricher.mobi/ の HTML を参考にしているので大丈夫とは思いますが。 (画像は利用許可を申請中です)
iamricher.mobi のオーナーからは画像の再配布許可が出なかったため、Flickr を探して CC 2.0 by-sa な画像を使うことにしました。こちらは4色あるので、色の変更もできることになりました;-)
2008-08-12

Ktai Entry の次期バージョンでは、「プラグインを無効にしたら、メールサーバーのパスワードが初期化されるため、有効化したとき再入力が必要」という仕様を改善する予定です。実装としては、プラグインを無効化したとき、パスワードを別途保存してから初期化し、有効化したらそれを復帰させるという仕組みです。
わざわざ保管するならそのまま残しておけばよさそうですが、そうするとwp-mail.php を実行されたとき外部メールサーバーにアクセスされてしまう問題が発生してしまいます。Ktai Entry が有効なときは wp-mail.php の実行を抑止していますが、停止したときはパスワードを初期化することで防いでいるわけです。
本題はそこではありません。なんと、「プラグインを無効化したときに実行されるアクション」(Ktai Entry の場合 deactivate_ktai_entry/ktai_entry.php) が、実は2回実行されることが判明しました。1回だけ実行されると思ってコーディングすると保存したパスワードが消えてしまうため、調査した結果2回実行されていたのでした。
public function stopped() {
$pass = get_option('mailserver_pass');
if ($pass && $pass != 'password') {
update_option('ke_mailserver_pass_store', $pass);
} else {
delete_option('ke_mailserver_pass_store');
}
update_option('mailserver_pass', 'password');
}
当初書いていたコードは上記の通りです。プラグインが無効化されたら、mailserver_pass オプションの値を ke_mailserver_pass_store として保管します。もともと mailserver_pass が空もしくは初期値 (’password’) の場合は、安全のため ke_mailserver_pass_store が存在すれば消す処理を入れました。ところが、この安全処理が仇になりました。2回目の deactivate アクション実行時にここを通ってしまうため、保管したパスワードが消えるのです。結局、安全処理は削除せざるを得ませんでした。
WordPress 2.5, 2.6 ともにそうなっています。WordPress 2.3 以前は調べていませんがたぶん同じでしょう。なんで2回実行してしまうんでしょうね?? WordPress コアのコードを見る限り、1回だけしか実行されないような気がするんですが……。
2008-08-10

WordPress 2.6 へのアップグレードを見送っていた当サイトですが、一足飛びに、WordPress 2.6.1 ベータ版にアップグレードしました。2.6 正式版よりもバグが少ないとにらんでのことです
しかし、困った問題が発生しました。それは、カテゴリー URL が「http://www.yuriko.net/cat/ほげほげ/」→「http://www.yuriko.net/arc/cat/ほげほげ/」に変わってしまったことです。タグ URL も同様に「arc/」がついてしまいます。これは、パーマリンク構造を「/arc/%year%/%monthnum%/%day%/%postname%/」にしているために、先頭にある「/arc/」をカテゴリー URL、タグ URL にも補完してしまっているのでしょう。この挙動は不可思議なので、元に戻してもらいたいですよね……。さっそくチケット #7490を切りましたが、2.6.1 リリースまでに直してもらえるんでしょうか……。当面は、mod_rewrite かリダイレクトで逃げるしかなさそうですが。
[追記] ウチのサイトは「URL を変えない」ことが信条なのに、ソフトウェアの都合で URL 体系を変えられたら、たまったものではありません。とりあえず、wp-includes/rewrite.php をいじって元に戻しました。
450,451c450,454
< $this->category_base = 'category';
< $this->category_structure = trailingslashit( $this->front . $this->category_base );
---
> $this->category_structure = $this->front . 'category/';
> else
> $this->category_structure = '/' . $this->category_base . '/';
> // $this->category_base = 'category';
> // $this->category_structure = trailingslashit( $this->front . $this->category_base );
469,470c472,476
< $this->tag_base = 'tag';
< $this->tag_structure = trailingslashit( $this->front . $this->tag_base );
---
> $this->tag_structure = $this->front . 'tag/';
> else
> $this->tag_structure = '/' . $this->tag_base . '/';
> // $this->tag_base = 'tag';
> // $this->tag_structure = trailingslashit( $this->front . $this->tag_base );
[追記] 2.6.1 ベータ2で直りました。パーマリンク構造が /archives/%post_id% の場合でも同じ不具合が発生しますから、わりと重度な不具合だったと言えます。
2008-08-09


WordPress 用 Google Maps プラグイン「Lightweight Google Maps」のバージョン 1.40 正式版をリリースします。バージョン 1.30 からの変更点は以下の通りです。
- WordPress 2.0.x に再び対応することにしました。
- 携帯電話での地図表示は Mobile Eye+ にも対応しました。ただし、「この場所の地図」というテキストリンクになります。
- Ktai Location 1.0.0 以降で導入した、Lat_Long フィールドの第3引数 (高さ) に対応しました。以前のバージョンは非対応のため、高さフィールドを持つ Lat_Long フィールドを認識しない場合がありました。
- 衛星写真のみの表示を廃止し、地形図を表示できるようにしました。ただし、以前のバージョンで衛星写真の表示を設定している場合は、設定パネルで設定を変更しない限り、そのまま表示されます。
- 独立の地図ページを開いたとき、最新地点のマーカーに対して情報ウィンドウが出るようにしました。また、投稿に出た地図のマーカーをクリックして独立の地図ページにジャンプしたときはその地点のマーカーに情報ウィンドウが出るようにしました。
- 独立の地図ページにおいて、同一地点に複数の投稿があるときはタブウィンドウにして、マーカーが重ならないようにしました。ただし、微妙に位置情報がズレているときは、タブウィンドウにならずマーカーが重なってしまうことがあります。
- 独立の地図ページにおいて、固定ページで設定した位置情報 (Lat_Long フィールド) を認識してマーカーが打たれるようになりました。従来は、地図ページで打たれるマーカーは、投稿で設定されたものだけでした。
- 独立の地図ページで、カテゴリーの絞り込みメニューは、「表示」ボタンを廃止して、メニューを選択するだけで済むようにしました。
- WordPress 2.6 以降で、wp-content/ ディレクトリーもしくは wp-content/plugins/ ディレクトリーを移設した場合に対応しました。lightweight-google-maps/wp-load.php の書き換えが必要です。
- 各投稿に記録された Lat_Long カスタムフィールドをすべて削除する機能がつきました。プラグインの削除時などにご利用ください。
バージョン 1.40 はベータ版を4回出していましたが、ついに正式版としてリリースいたします。ベータ版その4からは、MobilePressNeo サポートの削除と、固定の地図ページでのデザイン調整です。MobilePressNeo を使っていると、PC から閲覧していた場合でも「この場所の地図」というテキストリンクになったり、固定の地図ページが出なかったりという問題があったため、対応をあきらめました。MobilePressNeo の場合、PC であっても「携帯閲覧である」と処理してしまったのが理由なので、判別をあきらめてすべて PC であると処理することにしました。その結果、携帯では地図が出ません。
2008-08-07

WordPress 用 Google Maps プラグイン「Lightweight Google Maps」のバージョン 1.40 ベータ版(その4)を配布いたします。ベータ版その3からの変更点は以下の通りです。
- 衛星写真の表示を廃止して地形図を表示できるようにしました。
- 同一地点に複数の記事があったときのタブ表示で、2,3,4,.. と最初の数字が2から始まっていた不具合を直しました。
※プラグイン自体のバージョン表記が 1.40-beta3 のままになっていました。しょせんベータ版なのでアーカイブの差し替えはせず、そのままといたします。少々ご不便をおかけしますが、ご了承ください。
Google マップのストリートビューに対応しようと調べてみたところ、地形図には簡単に対応できることは分かりました (以前は地形図に対応するための API が不明だった)。「地図+写真」があるので、衛星写真は廃止します。ストリートビューは試しに組み込んでみたものの、動作があまりにバギーなのであきらめました。バージョン 1.50 以降で対応を考えたいと思います。
このベータ版で問題なければ、そのままリリースとします。
2008-08-06

先月下旬に、「WP-PageNavi を使わずにナビゲーション表示」というテクニックを公開しましたが、パーマリンクを使っていても検索などクエリー文字列を使う URL の場合 (http://example.com/?s=検索文字列 など)、不具合が起きることが分かりました。
そこで、全面的に変更したものに差し替えます (元記事も新しいコードに入れ換えてあります)。ここまで長くなると、関数化した上でテーマの functions.php に切り出して、index.php 等からはその関数を呼び出す方がいいですね。
<div class="tablenav"><?php global $wp_rewrite;
$paginate_base = get_pagenum_link(1);
if (strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()) {
$paginate_format = '';
$paginate_base = add_query_arg('paged', '%#%');
} else {
$paginate_format = (substr($paginate_base, -1 ,1) == '/' ? '' : '/') .
user_trailingslashit('page/%#%/', 'paged');;
$paginate_base .= '%_%';
}
echo paginate_links( array(
'base' => $paginate_base,
'format' => $paginate_format,
'total' => $wp_query->max_num_pages,
'mid_size' => 5,
'current' => ($paged ? $paged : 1),
)); ?></div>
携帯電話の位置情報活用プラグイン「Ktai Location」のバージョン1.0.3 をリリースしました。GPS 等の位置情報を WordPress ウェブログに簡単に取り込むことができます。1.0.2 からの変更点は以下の通りです。
- 位置情報同一である条件を「小数点以下5ケタ目で四捨五入した結果が一致する」に緩和しました。
- Ktai Location 1.0.0 以降で、位置情報に高さ情報がないのに、Lat_Long フィールドに2つめのコンマを付けてしまっていた問題を修正しました。Lightiweight Google Maps の 1.30 以前で、緯度経度を指定して地図を表示したとき、このような Lat_Long フィールドを認識しない問題があります。
1.0.0 からの新機能である高さフィールドの付与で問題がありました。なんと、高さ情報がなくてもコンマを付けてしまっていたのです (「35.688344444444,139.70014166667,」のような感じ)。ほとんどの場合問題がないのですが、Lightiweight Google Maps のバージョン 1.3.0 以前で、緯度・経度を指定して地図を表示させたとき (投稿に表示される小さい地図のマーカーをクリックして大きい地図にジャンプしたとき等) では、そういう Lat_Long フィールドが出ない不具合がありました。Lightiweight Google Maps の方を修正すべき問題ですが、旧バージョンを使う人のために Ktai Location の方を直すことにしました。すでに余分なコンマがついてしまっている場合、phpMyAdmin ないし mysql コマンドラインで以下の SQL を実行してください (wp_ の接頭辞は適時変更してください)。
UPDATE wp_postmeta SET meta_value = SUBSTRING_INDEX(meta_value, ',', 2)
WHERE meta_key = 'Lat_Long' AND SUBSTRING(meta_value, -1, 1) = ',';
2008-08-05
阪神タイガースは、本日のカープ戦に 6-1 で負けてしまったため、試合のなかったジャイアンツに自力優勝の可能性が復活してしまい、優勝マジックが消滅いたしました……。
せっかく入れていた優勝マジックカウントダウンウィジェットは取り外しです。「優勝マジック」の欄を空白にすれば、自動的にウィジェットの表示はなくなります。間違っても「マジック 0」にしてはいけません。これは「優勝」を意味してしまいます
明日こそはタイガース勝利、ジャイアンツ惨敗でマジックを復活させましょう!!
WordPress 用 Google Maps プラグイン「Lightweight Google Maps」のバージョン 1.40 ベータ版(その3)を配布いたします。1.30 より大きな変更を加えたため、ベータ版を配布して広くテストを募ることといたします。ベータ版その2からの変更点は以下の通りです。
- 地図ページでカテゴリーやタグで絞り込んだときでも、固定ページに登録した位置情報が出るように改善しました。
- ベータ版その2が PHP4 で動作しなかった問題の修正。
固定ページに登録した位置情報の扱いを改善しました。WordPress 2.5 以降では非常に素直な実装なのですが、WordPress 2.3 以前では、投稿とページの両方をカテゴリー・タグで絞り込むためには、SQL のクエリー文字列をいじるというアドホックな実装をせざるを得ませんでした。
今回のバージョンで様子を見て、問題なければバージョン 1.40 の正式リリースとします。
2008-08-01

製作中だった Mobile Eye+ へのパッチですが、やっと形になったので公開いたします。パッチによる修正点は以下の通りです。
- PC 表示で Mobile Link Discovery を追加しました。これにより、「同じ URL で携帯対応している」ことを検索エンジンや Ktai Style に通知することができます。
- イー・モバイルの音声端末 H11T でも携帯表示にします。(EMONSTER, H11HW は携帯表示になりません)
- フロントページ (トップページ) は携帯電話にキャッシュされないようにします (au 端末対策)。
- URLGATE 機能で、使用する外部サービスを個別に ON/OFF できる機能を追加します。
- 「ブログのパーマリンク」の設定機能を削除します。(WordPress 2.3 以降では「使用しない」で不具合が出るため、「使用する」に固定です)
- 自サイト内のリンクなのに URLGATE 画面が出てしまう場合があった不具合を修正します。
- URLGATE 画面で、ドコモ端末では URL のコピー用テキストフィールドが出なかった不具合を修正します。
- 「画像リサイズ (srea.jp)」のサーバー削減に対応します。
- ホスト名にポート番号がつく場合 (http://example.com:8080/ のような URL) でも正常動作するようにします。
- 「ユーザー登録してログインしたユーザーのみコメントをつけられるようにする」の設定をしている場合、コメント投稿フォームが出ないように修正します。
- 設定パネルを WordPress 2.5 以降の見た目に適応させます。
- 設定パネルにおいて、WordPress Japan フォーラムへのリンクを WordPress 日本語フォーラムに変更します。
- テーマのフッターから「十六夜.JP」へのリンクを削除します。
- Ktai Style の default テーマに似たテーマが添付しています (UTF-8 文字コード専用)。
ダウンロードは「Mobile Eye+ パッチ配布ページ」から行なってください。さすがに「WordPress Plugins/JSeries」で配布するわけにいかないので、当サイトで配布することにします。
今後継続してパッチを開発するかどうかは分かりません。あまり改変しまくるとまおうさんが開発再開するモチベーションを失なってしまいそうなので、最低限の修正に留めたいと思っています。できれば、今回のパッチを取り込んでもらって「Mobile Eye+ v1.4.0」をリリースしてもらいたいところですが、今回の修正点が作者の意向と合うかどうかは分からないので、実現可能性は謎ですね〰。