11月29日に川崎市男女共同参画センターで行われた、WordBench 川崎の私的メモです。今回は、Ktai Style プラグインのコード読書会。

あまり説明っぽく書いていないのであしからず。

patches.php, patches-pc.php

  • Ktai Style と相性問題のあるプラグインに対して、個別対応している。(なかなか大変)
  • Contact Form 7 … 作者の三好さんと共同で文字化け問題に対処
  • 本来は、isktaistyle() のようなものを他のプラグイン側から呼んで個別対応するようにしてほしい

wp-content の移設対応

if (! defined('WP_LOAD_CONF')) {
	define('WP_LOAD_CONF', 'wp-load-conf.php');
	define('WP_LOAD_PATH_STRING', 'WP-LOAD-PATH:');
}
  • 複数の WordPress インストールベースで plugin フォルダを共用するような場合に対応
  • シンボリックリンクによる運用ではうまくいかない。プラグイン自身のフォルダを調べて、そこから ../ で上のフォルダにたどっていくような場合にハマる
  • plugins_url() で “wp-content/plugins/” まで取ってこられる
  • checkin_wp_load() … __FILE__ から上にたどって wp-load.php があるかを調べる。あれば標準的なインストール
  • 移設している場合は、wp-load-conf.php を生成しパスを 書き込んでおく。そのために apache による書き込み権限が、やむを得ず必要

説明文の日本語化

Text Domain: ktai_style
Domain Path: lang/

を設定しておくと吉。プラグインが有効の時だけ。

$textdomain_loaded

  • 言語リソースを読んだフラグ
  • load_plugin_textdomain() は plugin_loaded で実行

init_pc()

  • Mobile Link Discovery の挿入
    <link rel="alternate" media="handheld" type="text/html" href="<?php echo htmlspecialchars($url, ENT_QUOTES); ?>" />
    
  • Google などに携帯対応ページがあることを教える
  • Mobile Link Discovery … 日本発の仕様
  • atom_head, atom_entry 処理は現状 disabled
  • Ktai Style 用 template に切り替え
  • PC 用のヘッダ挿入アクションは削除

check_ktai_login

  • REQUEST_URI に wp-login.php の “.php” がなくても受け付ける
  • MultiViews 対策

template_redirect

  • Ktai Style のキモ
  • 優先度 11 にしている。他のプラグイン処理より後。URL 書き換えなどが行われる場合があるから
    add_action('template_redirect', array($this, 'output'), 11);
    

キャリア判別正規表現

  • emulator 対策 … ソフトバンク PDC / ソフトバンク 3G
  • Huawei だけ “emobile” ではなく “Huawei”
  • iPhone, iPod, Android

operators フォルダ

  • services.php … 基底クラス
  • i-mode.php … Shift-JIS

マニアックな正規表現

エスケープされたダブルクォーテーションが入っている場合もサポート

$buffer = preg_replace(
		'!<img localsrc="([^"]+)"( alt="([^"\\\\\\\\]*?(\\\\\\\\.[^"\\\\\\\\]*)*)")? ?/?>!se',
		'isset($trans["$1"]) ? $trans["$1"] : ("$3" ? "$3" : "〓")',
		$buffer);

IP アドレス

	static public $networks = array(
		'61.198.128.0/22', // Unified 8 addresses
...
        );
  • どの通信キャリアからのアクセスか、HTTP_USER_AGENT だけでは偽装の可能性があるので IP アドレスでも判別
  • WILLCOM だけやけに IP アドレスブロックが多くて煩雑
  • ドコモはシンプル