Ktai Style マニュアル

よくある質問と答え

Ktai Style に関して、附属ドキュメントに掲載されていない疑問点やノウハウなどを掲載します。ここにない質問があれば、まず、附属ドキュメントをよく読んでみてください。それでも解決できなければ、作者にメールするか、WordPress 日本語フォーラム の「プラグイン」で質問してください。

インストール関連

プラグインを有効にすると "Fatal Error" になる
以下の点を確認してください。
wp-content/plugins ディレクリーにファイルを入れるだけでいいのか
はい、wordpress のルートディレクトリーにインストールするファイルはありません。Mobile Eye, Mobile Eye+, MobilePressNEO と違って、コメント受け付けスクリプト comments_post.phpも ktai_style フォルダーに入れてあります。
管理画面の設定をどう変更すればいいか分からない
管理画面の「携帯表示」での設定は変更しなくてもそのまま使えます。初期状態で万人向けの設定に最適化されていますので、よく分からない場合はそのままで結構です。
PC 版テーマが default に戻る
Ktai Style バージョン 1.00 から、携帯テーマで style.css を必須にしました。自作携帯テーマを作っている場合、バージョン 0.99 以前からのアップグレードを行うときには、あらかじめ、自作テーマに style.css を入れる必要があります。入れていない場合、WordPress コアが「不正なテーマ」と判断して、(ちょっと変ですが) PC 版テーマを default に戻してしまいます。(バージョン1.00 のみ。バージョン 1.01 以後 PC テーマは変更されません)
自作テーマを使っていないのに、PC 版テーマが default に戻る場合は、お使いの携帯テーマで index.php, style.css の両方のファイルが存在するか確認してください。
WP Cache, WP Super Cache 等のキャッシュプラグインと併用したい
インストール手順の「WP-Cache と併用する場合」または「WP Suer Cache と併用する場合」を参照してください。なお、「Mobile Eye+とWP-Cacheを併用する」のテクニックは、Ktai Style では不具合が起きます (携帯キャリアごとに絵文字が違ったり、分割位置が違うため)。
携帯サイトの URL を別にしたい
Ktai Style の現在のバージョンでは困難です。Ktai Style は、WordPress コアがリクエスト URL を解析し、テンプレートを呼び出す段階で携帯サイト用テンプレートに差し替える仕組みになっているためです。閲覧者の利便性を考えると、PC版/携帯版サイトの URL が同一である方が優れています。最近の検索エンジンは同一 URL にPC版/携帯版がある状況を理解しているので SEO 的にも問題ありません。

仕様に関して

パケット節約はどう行なっているか
Ktai Style は、パケット節約のため、以下のような XHTML 書き換えを行っています。相当なパケット数削減となると考えています。
サーバーへの負荷はどれぐらいか
ウェブログコンテンツの読み込みは、WordPress の標準 API を使っているため、PC 向けサイトを表示するときの負荷とほぼ同等です。MT4i のように携帯版だけ負荷が高くなるという現象は、おそらく発生しません。(ちなみに、Mobile Eye, Mobile Eye+, MobilePress の負荷も Ktai Style とほぼ同様です)

問題が発生したときは

携帯電話で閲覧すると白紙画面になる
PlayStation Portable で閲覧したら真っ黒になる
PlayStation Portable で閲覧すると真っ黒になることがあります。お使いの携帯テーマで、body 要素に空の内容の bgcolor 属性があると発生します。bgcolor を適切に設定するか、何も色を指定しない単純な <body> という記述に修正してみてください (Ktai Style 1.33 からは附属テーマを適切な記述にしています)。
携帯電話でコメントしたりログインすると Internal Server Error になる
PHP を CGI 動作している場合に、携帯電話でコメントしたりログインすると Internal Server Error になるときは、PHP のファイルに実行権限が与えられていません。comments-post.php, login.php, redir.php, wp-admin/*.php のバーミッションを 705 もしくは 755 にしてください (wp-admin/ は、配下の PHP ファイルをすべて変更します)。
携帯電話で閲覧すると文字化けする
サーバーの php.ini や .htaccess で mbstring.encoding_translation = Off かつ mbstring.http_output = pass にしてください。Ktai Style は、携帯電話向けに Shift_JIS コードに変換していますが、encoding_translation = Onhttp_output が UTF-8 や EUC-JP になっていると、それらの文字コードに再変換されてしまい、携帯電話で見ると化けてしまいます。
携帯テーマを改造したら文字化けした
携帯電話での出力は Shift_JIS ですが、携帯テーマは、PC 版テーマと同じ文字コード (たいていは UTF-8) で記述してください。Shift_JIS で保存すると文字化けします。テンプレートファイルはほとんど英数字のため、テキストエディターによっては、日本語文字列を追加したとき Shift_JIS で保存してしまうことがあります。UTF-8 (BOM なし) で保存されるよう、ご留意ください。
コメント投稿すると文字化けする
Ktai Style 0.99 以降にアップグレードすれば解決します。また、言語リソース (ktai_style-ja.mo) が読み込まれているか確認してください。管理画面の「携帯表示」や、携帯電話画面が所々英語になっていれば、読み込まれていません。wp-config.php の WPLANG が "ja" であるか確認してください。"ja_UTF" のまま使っている場合、ktai_style-ja.mo を ktai_style-ja_UTF.mo にリネームしてください。
携帯電話で閲覧すると英語になっている個所がある
wp-config.php の WPLANG が "ja" であるか確認してください。WordPress ME 2.1.x 以前からのアップグレードで、"ja_UTF" のまま使っている場合、ktai_style-ja.mo を ktai_style-ja_UTF.mo にリネームしてください。
EUC-JP 環境の場合、EUC-JP 用の言語リソースを作る必要があります (1.70 から EUC-JP の言語リソース添付はやめました)。ktai_style-ja.po を ktai_style-ja_EUC.po にリネームし、2箇所ある「utf-8」を「euc-jp」に変更し、かつ、文字コードを EUC-JP に変換します。そして、Poedit もしくは msgfmt コマンドで mo ファイルを生成してください。
アクセスログに記録が残らない
デフォルトでは、Counterize II プラグインなど、アクセスを記録するプラグインでログが残らないことがあります。お使いのテーマの header.php で ks_wp_head() の引数を KTAI_NONE_PC_HEAD から KTAI_DO_PC_HEAD に変更してください。プラグインによっては、footer.php で ks_wp_footer() の引数を KTAI_NONE_PC_HEAD から KTAI_DO_PC_HEAD に変更する必要があるかもしれません。
WordPress.com stats のように JavaScript でアクセス記録を取るプラグインは、JavaScript が実行されない携帯電話 (ドコモ、au など) からの訪問が記録されません。
外部サイト接続確認用スクリプトの redir.php の悪用を防ぐため、正しい _wpnonce パラメーターを与えないとエラーになります。_wpnonce パラメーターは 12 時間ごとに更新されるため、画面メモなどで保存したページから外部サイトへのリンクを辿った場合、_wpnonce が無効となってしまい、こういう現象が発生します。ページを再読み込みさせてからリンクを辿ってください。
3G 端末で見ても画像がインライン表示されない
3G 端末, ウィルコム, スマートフォン等で見たとき画像がインライン表示されない場合は以下の点を確認してください。どうしても原因不明の場合、inc/shrinkage.php の10行目にあるコメント (KTAI_SHRINKAGE_DEBUG) を外してデバッグモードにしてください。この場合、サムネール作成時のエラーがブラウザーに表示されますので、その内容と shrinkage.php のソースコードを突き合わせて原因を調べてみてください。
画像を表示する/リンクに変換のメニューが出ない
3G 端末等でアクセスしたとき、画面下部に「画像を表示する/リンクに変換」のメニューが出ない場合は、使用しているテーマの footer.php に <?php ks_switch_inline_images(); ?> が記述されているか確認してください。挿入位置などは、default テーマの footer.php を参考にしてみてください。

携帯サイトの見栄えやテーマ作成に関して

ヘッダ画像を入れたい
まず、ヘッダ画像を作ります。多くの端末で見られるよう、画像サイズは横幅160ピクセル、縦幅36ピクセルぐらい、ファイルサイズは 2KB 前後に留めてください。JPEG 型式もしくは、PNG, GIF の両方の型式を作って、自作テーマのフォルダに入れます。次に、header.php において <h1><?php echo get_bloginfo('name'); ?></h1> と書かれている部分を以下のように置き換えてください (ヘッダ画像のファイル名は適宜読み替えること)。
<h1 align="center"><img src="<?php ks_theme_url(); ?>logo.png" alt="<?php echo get_bloginfo('name'); ?>" /></h1>
ks_page_title()関数を使っている場合、ヘッダ画像のファイル名を引数として与えるだけでよいです。
<?php ks_page_title('logo.gif'); ?>
はい。これは著作権表示ではないため、削除しても Ktai Style のライセンス (GPL) に違反しません。単に Ktai Style の宣伝のために付与しているものです ;-)
1画面に表示される投稿数を変えたい
PC 用管理画面の「表示設定」で、「1 ページ内の投稿数」を変更してください。ページ番号つき URL (http://blog.example.jp/page/3/ のような URL) でも、PC と携帯の表示を同じにするために、携帯電話だけ表示数を減らすことはできません。
カタカナを半角カナに変換させたい
携帯テーマの functions.php に以下のコードを記載してください。functions.php がないときは、新規のテキストファイルとして作成するか、Classic テーマの functions.php を複製してください。
<?php 
if (! defined('KTAI_ADMIN_MODE')) {
	add_filter('ktai_raw_content', 'ks_convert_kana');
}
?>
Ktai Style が作るサムネールを大きくしたい
shrinkage.php にある define 文のどれかを修正するか、ktai_thumbnail_max_size 独自フィルターを使うと可能です。ただし、すでに作成されたサムネールのサイズは変わりません (サーバー上に生成ずみのため)。なお、サイズは変更しないことを推奨します。最大 96 ピクセルは小さいと感じられるかもしれませんが、複数の画像がある場合などを考えると、これより大きい場合はスムーズに表示できなかったり、パケット料金が嵩むなどの問題が出るかもしれません。
Amazon の画像をそのまま表示したい
デフォルトでは、外部サイトの画像はリンクに変換されるため、Amazon アフィリエイトの画像もリンクになります。これを画像そのまま表示させるには、ktai_image_to_link フックを使います。以下のようなコードを、使用している携帯テーマの functions.php に追加してください (functions.php がなければ作る)。「http://ecx.images-amazon.com/images/」の部分は、実際に挿入される画像 URL にあわせて適宜修正してください。
<?php 
function ks_keep_amazon_image($replace, $orig, $src) {
	if (preg_match('#^http://ecx.images-amazon.com/images/#', $src)) {
		$replace = $orig;
	}
	return $replace;
}
add_filter('ktai_image_to_link', 'ks_keep_amazon_image', 10,3);
?>
携帯電話キャリアや端末種別を区別させたい
携帯電話キャリアはテンプレートタグ is_ktai() の返り値で判別できます (DoCoMo, KDDI, SoftBank, WILLCOM, EMOBILE, Unknown のいずれか)。端末種別はテンプレートタグ ks_service_type() または is_ktai('type') の返り値で判別できます。iモード の場合 mova, FOMA のいずれか、EZweb の場合 HDML, WAP2.0 のいずれか、ソフトバンクの場合 PDC, 3G のいずれか、ウィルコムの場合 AIR-EDGE、イー・モバイルの場合 EMnet という値になります。ディズニー・モバイルは ソフトバンク 3G とみなします。
ウィルコム用テーマを設定しても W-ZERO3 シリーズで適用されない
ウィルコム用テーマは音声端末 (WX シリーズなど) のみ適用されます。W-ZERO3 シリーズは Windows Mobile 採用のスマートフォンなので、ウィルコムではなく「その他」端末扱いとなり、共通設定テーマが適用されます。
イー・モバイル用テーマを設定しても EM・ONE, EMONSTER, Touch Diamond で適用されない
イー・モバイル用テーマは、通常の音声端末 (2010年3月時点では H11T, H11HW, H12HW, H31IA のみ) に適用されます。EM・ONE, EMONSTER, Touch Diamond は Windows Mobile 採用のスマートフォンなので、「その他」端末扱いとなり、共通設定テーマが適用されます。
スタイルシートを使いたい
各社 3G 端末は、限定的ながらスタイルシートに対応しています。ただし、ドコモ旧端末 (iモードブラウザ1) のスタイルシート対応 (i-CSS) は、インライン CSS にしか対応していません。Ktai Style では、header.php の1行目に <?php ks_use_appl_xhtml(); ?> と書けば、スタイルシートに対応できます (スタイルシートの利用方法)。
ただし、自作テーマに直接スタイルシートを書いた場合、旧端末用に変換はされません。この場合、mova, ソフトバンク PDC 用テーマと、FOMA, EZweb, ソフトバンク 3G, ウィルコム, イー・モバイル用テーマそれぞれ2種類を作って、設定で使い分ける必要があります。
MT4i みたいに、カテゴリーのポップアップメニュー (プルダウンメニュー) を付けたい
携帯テーマを改造すれば可能です。index.php で ks_dropdown_categories()を使って以下のようなコードを入れれば OK です。ただし、カテゴリー切り替えメニューはパケット数を消費するため、mova, ソフトバンク PDC など表示サイズが厳しい端末で常にページ分割が発生するという不便が出ます。このため、こういうインターフェースを使うことはおすすめしません。どうしても使用する場合は、カテゴリー数を15個以下にして1ページに表示する投稿数を10件程度にしてください。
<form action="<?php ks_blogurl(); ?>"><div align="center">
<?php ks_dropdown_categories(); ?><input type="submit" value="選択" />
</div></form><hr />
モバイル Google Adsense を入れたい
特に問題なく使用できるようです。Google の説明に従って適用してください。
モバイル Google Analytics を入れたい
PHP 用の解析コードを Google の説明通りに入れてもうまく動作しません。2箇所問題があるためです。まず、携帯用 header.php はグローバルスコープではないため、$GA_ACCOUNT, $GA_PIXEL 変数に global 宣言が必要なこと。次に footer.php に入れるコードが PHP ショートタグ形式なこと (<?= $googleAnalyticsImageUrl; ?> になっている) です。
Ktai Style 2 以降のテーマでは、functions.php に以下のようなコードを書いて ks_wp_footer() にフックすることがおすすめです。(googleAnalyticsGetImageUrl 関数は Google から最新のものを入手して使ってください)
  // Copyright 2009 Google Inc. All Rights Reserved.
global $GA_ACCOUNT, $GA_PIXEL; // Change by IKEDA Yuriko
	$GA_ACCOUNT = "MO-XXXXXXXX-X";
	$GA_PIXEL = "/ga.php";

function googleAnalyticsGetImageUrl() {
	global $GA_ACCOUNT, $GA_PIXEL;
	$url = "";
	$url .= $GA_PIXEL . "?";
	$url .= "utmac=" . $GA_ACCOUNT;
	$url .= "&utmn=" . rand(0, 0x7fffffff);
	$referer = $_SERVER["HTTP_REFERER"];
	$query = $_SERVER["QUERY_STRING"];
	$path = $_SERVER["REQUEST_URI"];
	if (empty($referer)) {
		$referer = "-";
	}
	$url .= "&utmr=" . urlencode($referer);
	if (!empty($path)) {
		$url .= "&utmp=" . urlencode($path);
	}
	$url .= "&guid=ON";
	return str_replace("&", "&", $url);
}
 
function show_googleAnalyticsGetImageUrl() {
	$googleAnalyticsImageUrl = googleAnalyticsGetImageUrl();
	echo '<img src="' . $googleAnalyticsImageUrl . '" />'; // Change by IKEDA Yuriko
}
// Added by IKEDA Yuriko
add_action('ktai_wp_footer', 'show_googleAnalyticsGetImageUrl');
携帯専用ブログにしたい
以下の内容を新規のテキストファイル ks_reject_pc.php として作成します (独立したプラグインとなります)。これを wp-content/plugins にアップロードし、プラグイン管理画面から「Ktai Style Reject PC」プラグインを有効にすれば可能です。以下の14行目〜17行目を入れるかわりに、使用するテーマの footer.php で ks_switch_pc_view() を呼び出す部分を削除しても構いません (6行目〜13行目は必須です)。
<?php 
/*
Plugin Name: Ktai Style Reject PC
Version: 1.0.0
*/
function ks_reject_pc() {
	$url = parse_url(get_bloginfo('wpurl') . '/');
	if (! preg_match('!^' . preg_quote($url['path'], '!') 
	. 'wp-(admin/|login|includes/)!', $_SERVER['REQUEST_URI'])) {
		exit();
	}
}
add_action('ktai_init_pc', 'ks_reject_pc');
function ks_delete_switch_pc($html) {
	return NULL;
}
add_filter('ktai_switch_pc_view', 'ks_delete_switch_pc');
?>
携帯電話ネットワークからのアクセスに限定したい
携帯電話ネットワークからのアクセスに限定する (== PC から携帯電話のユーザーエージェントを名乗ってのアクセスを弾く) には、ks_in_network() テンプレートタグを使い、これが TRUE かどうかを判定すればよいです。ただし、突然 IP アドレス帯域が増えることがあるため、誤判定する可能性があることにご注意ください。携帯電話ネットワーク外のアクセス時に白紙ページを出すならば、以下のコードを携帯テーマの functions.php に書いてください。
<?php 
function ks_deny_out_of_network() {
	global $Ktai_Style;
	if ($Ktai_Style->ktai && ! $Ktai_Style->ktai->in_network()) {
		exit();
	}
}
add_filter('template_redirect', 'ks_deny_out_of_network', 8);
?>
外部サイトへのリンクを通勤ブラウザ等の変換サービス経由にしたい
次の2通りの方法が可能です。
PC 閲覧時に携帯電話絵文字を画像で出したい
Ktai Style は、今のところiモード絵文字に対応する画像を収録しており、PC 閲覧時に絵文字を画像として表示します。しかし、EZweb, Yahoo! ケータイ向け絵文字の画像はありません。iモードに似た絵文字であれば画像表示できますが、EZweb や Yahoo! ケータイのみ存在する絵文字は代替文字になってしまいます。
ただし、ご自身で、携帯電話各社が提供する絵文字の利用許可を取り、Ktai Style で使うことは可能です。例えば、利用中テーマに各キャリアごとのディレクトリーを作成し、10進数の絵文字番号 (ウィルコムは16進数3ケタ) をファイル名とした画像ファイルを収納した場合は、以下のようなコードを使えば可能です。このコードを使うには、新規のテキストファイル ks_other_pict.php に内容を記載し(独立したプラグインとなります)、wp-content/plugins にアップロードし、プラグイン管理画面から「Ktai Style Other Pict」プラグインを有効にします。
<?php 
/*
Plugin Name: Ktai Style Other Pict
Version: 1.0.0
*/
function ks_other_pict($converted, $number, $alt, $charset) {
	$image = '';
	$pictdir = ks_theme_url(false);
	if (preg_match('/^d(\d+)$/', $number, $n)) {
		$image = '<img src="' . $pictdir . "imode/{$n[1]}.gif" . '" alt="' . $alt . '" />';
	} elseif (preg_match('/^(\d+)$/', $number, $n)) {
		$image = '<img src="' . $pictdir . "ezweb/{$n[1]}.png" . '" alt="' . $alt . '" />';
	} elseif (preg_match('/^se([0-5])([\da-f]+)$/', $number, $n)) {
		$offset = array(0, 90, 180, 270, 347, 423);
		$num = $offset[$n[1]] + hexdec($n[2]);
		$image = '<img src="' . $pictdir . "softbank/$num.png" . '" alt="' . $alt . '" />';
	} elseif (preg_match('/^wf([01][\da-f]+)$/', $number, $n)) {
		$image = '<img src="' . $pictdir . "willcom/{$n[1]}.png" . '" alt="' . $alt . '" />';
	} elseif (preg_match('/^e(\d+)$/', $number, $n)) {
		$image = '<img src="' . $pictdir . "emobile/{$n[1]}.png" . '" alt="' . $alt . '" />';
	} else {
		$image = is_null($alt) ? $converted : $alt;
	}
	return $image;
}
add_filter('ktai_convert_pict_other', 'ks_other_pict', 10, 4);
?>
※各キャリアに類似した絵文字画像を配布しているサイトがありますが、使用については自己責任でお願いします。自社の携帯絵文字を無許可で利用できるキャリア、商用利用では申請が必要なキャリアもあるようです。

以上