投稿画面の入力セクションの位置

ダッシュボードの投稿画面に入力セクションを追加する方法は以前にメモしておいた。デフォルトではメインカラムの一番下に追加されるので、ドラッグ&ドロップして上なり横なり好みの位置にもっていけばよいとしていた。
とはいえ、ユーザにその発想がない場合もある。いちいち説明するのは面倒くさいし、サイズ小さめであれば最初からサイドバーに設置したほうがスマートだ。表示位置を指定する方法があるのかどうか調べてみると、add_meta_box()の5番目のパラメータとして$context(編集画面セクションが表示される部分)というのがあった。これを指定しない場合のデフォルトは’normal’である。ほかに’side’というのがあって、こちらを指定すると入力セクションはサイドバーに表示される。

6番目のパラメータとして$priorityというのもある。これは上下位置を調整するものだろうか?

WordPress 3.2 がリリース

twentyeleven週末にWordPress 3.2 の日本語版がリリースされてた。今回はメジャーアップデートということで、コードネームはGershwin!

目立った変更点はダッシュボードのデザインだ。サイドメニューが立体的になり主張しすぎている。ネットワークのメニューがどこにあるのかわからなかった。ログアウトもよく使うから、ドロップダウンになってるのは面倒かな。このへんは慣れであろう。
まずはダッシュボードにアクセスすると、「お使いのブラウザは古すぎます!」というメッセージが大きく表示されて驚いた。某アドオンが捨てられなくてFireFox 3系を使っているためだ。そんなに古すぎるだろうか?「お使いのブラウザは古いかも?」ぐらいに和らげてほしいよ。

それより新テーマが追加されるという事前情報が気になっていたので、さっそく使ってみた。新テーマのTwenty Eleven はHTML5 + CSS3で作成されている。ページ遷移するたびにヘッダー画像が切り替わるのは、[外観]メニューの[ヘッダー]設定でオンオフ可能になっている。さらに[外観]メニューに[テーマ設定]という項目が追加されている。ここでは全体的に白背景か黒背景かを選択できる「色の設定」と、「リンク色の設定」「デフォルトのレイアウト」の設定がある。「デフォルトのレイアウト」とはサイドメニューの位置を左か、右か、無しかを選択できる。
業務用テーマを作成する場合にはこのようなカスタマイズは無用に思えるものの、配布テーマとなるとコードを触らずとも設定できる項目が重要になってくる。自由度が増すぶん公式テーマの審査基準も上がるんだろうなぁ。
構成ファイルを見るとloop.phpはなくなってて、かわりにcontent-XXX.phpのようなフィアル名がたくさんある。投稿フォーマットに関係があるのか?Twenty Eleven のすみからすみまで観察して勉強しなければ!

マルチサイトのサブドメインをサブディレクトリに変更したい

既存のサイトに子サイトを追加することになり、ネットワークの設定を行った。初めてこれを行う際にはサブドメイン方式かサブディレクトリ方式かが選べるはずだったように思う。ところが選択肢が表示されずに、強制的にサブドメイン方式になってしまった。
WordPressをインストールしてから1カ月以上経過している場合や再インストールした場合には、この現象になるらしい。wp-config.phpと.htaccessを手修正することでサブディレクトリ方式に変更することができた。

参考にしたのは、
akibonne’s manual of style : WordPress: サブディレクトリ式でマルチサイト化する手順

画像を投稿に挿入するタグをカスタマイズ

imagetag画像アップローダで[投稿に挿入]ボタンを押すと、編集中の記事に以下のようなimgタグが挿入される。

アンカータグやタイトル、サイズなどの属性は親切設計で付加してくれてるのだろうが、たいていは不要だ。自分テーマ特有のクラスを使いたい場合もあるので、[投稿に挿入]ボタンを押さずに手動でimgタグを記述してしまうことが多かった。
自分が使うにはそれでもよいものの、他人が使う場合は通じない。編集担当よりimgタグがめんどくさすぎてなんとかするよう要望があったので調べているうちに、[投稿に挿入]のタグをカスタマイズできることがわかった。

まずは get_image_tag というアクションフックを利用する。imgタグを生成するタイミングで不要なタグを除去することができる。

[PHP]
function my_remove_img_attr($html, $id, $alt, $title, $align, $size){

$html = preg_replace(‘/ width=”\d+”/’, ”, $html);
$html = preg_replace(‘/ height=”\d+”/’, ”, $html);
$html = preg_replace(‘/ class=”.+”/’, ”, $html);
$html = preg_replace(‘/ title=”.+”/’, ”, $html);

return $html;
}

add_action( ‘get_image_tag’, ‘my_remove_img_attr’, 1 ,6);
[/PHP]

これで挿入されるタグは以下となった。
<a href="画像URL"><img src="画像URL" alt="代替テキスト" /></a>

実をいうとアンカータグもいらない。しかし、この時点でアンカータグは生成されていなかった。記事に画像を挿入する別のタイミングがあるらしい。それが image_send_to_editor というアクションフックだ。ここでアンカータグを削除することができた。ついでに、自分テーマのクラスで囲む。

[PHP]
function my_image_send_to_editor( $html, $id, $caption, $title, $align, $url, $size ) {

$html = preg_replace(‘//’, ”, $html);
$html = preg_replace(‘/<\/a>/’, ”, $html);
$html = ‘

‘ .$html .’

‘;

return $html;
}

add_action( ‘image_send_to_editor’, ‘my_image_send_to_editor’, 10 ,7);
[/PHP]

これで挿入されるタグは以下となった。
<div class="imagebox"><img src="画像URL" alt="代替テキスト" /></div>

まとめて処理できるのかもしれないが、今のところはこんなかんじでまずまず。
参考にしたのは、
WordPressで画像をアップロードする際に挿入される邪魔な属性を排除するプラグイン | モンキーレンチ
WordPressの画像挿入時にwidthとheight指定が入らないようにする | Simple Colors

V3になっていたGoogle Maps API

GoogleMapジオタグのついた写真を地図上に表示する自作プラグインを手直しようと調べているうちに、Google Maps APIはV3になっていることが分かった。2009年のことらしいから、Google Mapにだいぶ触れていなかった、あるいは使うことがあっても以前のコードを流用していたのか。
V3になって大きく変わったのは、APIキーが不要になったことである。APIキーはサイトごとに申請する必要があったため、テストサイトなんかでは地図を表示できないことがあった。さらにスマホ対応や、ストリートビューが利用できるようになっている。
JavaScriptライブラリの組み込みは以下の記述となる。

[PHP]

[/PHP]

sensor=falseのところは、GPS対応のデバイスであればtrueにしていろいろできる。JavaScriptでの記述にけっこう変更点があるものの、これを機会に活用したい。

JavaScriptからホームURLを知りたい

現在のブログのホームURLを知るには、テンプレートタグのhome_url()である。これをJavaScriptから知るにはどうしたらよいのか?JavaScriptから動的に画像を差し替えたり、ajaxを使う際にはホームURLがわからないと困るのだ。
このようなときはあらかじめテーマに、hidden属性で home_url() を掃き出しておくことにしている。例えば、
[PHP]

のようにホームURLが分かる。

ただしHTML上ではどうしてこんなところにhiddenがあるのか、ということになるため収まりが悪い。もう少しスマートな方法はないものか。

親ブログの情報を取得する

マルチサイトにかかわっているため、親ブログ子ブログに関するメモが続く。
さて、子ブログから親ブログの情報を取得するには、
[PHP]
switch_to_blog(ブログID);
//なにか処理
restore_current_blog();
[/PHP]
こうすることで、親ブログの情報を取得することができる。
例えば処理でget_categories()を行えば、親ブログのカテゴリ一覧を取得する。ブログIDを指定すればよいので、もちろん親子にかかわることはない。マルチサイトでの他ブログの情報、という意味である。

子テーマで親テーマのディレクトリを知る

WordPressで構築しているポータルサイトに記事コンテンツ(いわゆるブログ)を設置することになった。ここで同じブログ内の別カテゴリとしてやるか、子ブログでやるかで悩むところだ。管理者が別ということもあって、記事が混在しないほうがよいかと子ブログを採用した。

デザインも似ているため子テーマでやってみようしたら、困ったことがあった。テーマ配下にある画像やJavaScriptのパスである。画像のパスを取得する際に親テーマのディレクトリにあるのか、子テーマのディレクトリにあるのかで区別する必要があったのだ。以下で区別できるとすぐに分かった。

子テーマの場合親テーマのURLは、
bloginfo('template_url');

子テーマの場合子テーマのURLは、
bloginfo('stylesheet_directory');

通常は同じ値が返るため区別のつかなかったこのコードを子テーマで使うと、違いがあった。

カテゴリ一覧の次ページでNotFound

カテゴリ一覧でページネーションできなくなる場合がある。例えば、
http://example.com/category/sample/
というカテゴリ一覧のページがあった際、次ページとなるはずの
http://example.com/category/sample/page/2/
がNot Foundになる。
いくつかのページ系プラグインで試したので、プラグインの問題というわけではなさそうだ。
このときカテゴリの一覧では、
query_posts($query_string .'&showposts=3');
というふうに表示件数を指定している。これが原因のようだった。showpostsで指定した件数が、ダッシュボードで設定している件数よりも少ない場合に発生する。