jQuery 1.5 RC 1 だってさ

jQuery1.5開発は順調に進んでいるようです。
開発者ブログに、JQUERY 1.5 RC 1 RELEASED がポストされていました。

1.4系から何が変わるのかは、JQUERY 1.5 BETA 1 RELEASEDJQUERY 1.5 BETA 1 CHANGE LOGセクションに詳細が書かれています。

ajax系が書き直され高速化が図られるらしく、他にIEに対するバグフィックスとかてんこ盛りなようです。
stableリリースが楽しみです。

これってprototype.jsに差をつけちゃうってことですかね。
$で取得するDOMがjQueryだと独自仕様になってるのがどうも馴染めないけど、そんなこと言っちゃいけないんでしょうねぇ。

WordPress, コメントスパムをメールアドレス指定でブロックしたい

WordPressでコメントを許可したらプラグインの Akismet を有効化しスパム対策をするのはご存知のとおり。
Akismetは大変優秀なプラグインなので大半のスパムはブロックしてくれますが、日本語のスパムは取りこぼすことがあります。

友人のブログがスパムにさらされ、SOSが来たので確認したところ、同じメールアドレスから送られてきていたのでこのアドレスをブロックすればどうにかなるかと思いました。

思いましたが、Akismetには特定のメールアドレスをスパム登録する方法がありません。

Twitter で「教えてエライ人」すると@wokamotoさんが、簡単だよプラグインでできるよって教えてくれました。

プラグイン作りは簡単と言えば簡単だし、敷居が高いと言えば高いのでモゾモゾしていると、管理画面 > 設定 > ディスカッション にそれらしい項目を発見!

コメントブラックリスト
ココへブロックしたいメールアドレスを入力して「保存」するとできました。
複数入力する時は「改行」で設定すれば良いようです。
ただ、日本語の単語は入力できるけど、スパムへ振分けしてくれませんでした。

WordPress 3, sidebar.phpが無い時のget_sidebar

default テーマが添付されなくなった WordPress 3.0。

get_sidebar を実行した時に…
WordPress 3.0 以前では使用しているテーマに sidebar.php が無かったら default テーマの sidebar.php が使用されていました。

default テーマが無くなると、どうなるんだろうと思ったのですが抜かり無く代替え策が考えられていました。

sidebar.php が無いときは、
wp-includes/theme-compat/sidebar.php が使われます。

theme-compat には他に

comments-popup.php
comments.php
footer.php
header.php

が用意されています。

ただファイルのコメントに次のように書かれていたので、一時的な処置のようです。
ちゃんとテーマに footer.php, header.php, sidebar.php などは用意しておいた方が良さそうです。

This file is here for Backwards compatibility with old themes and will be removed in a future version

2010-10-09, WordPress 3.0 会議で話しました。

2010-10-09 AQUA博多 B会議室で開催された「WordPress 3.0 会議(仮)」で話しました。
結局、最後までタイトルに(仮)がついたままでした。
当日は定員の60人近い方にお越しいただき満席となり盛況に終わることができました。
ありがとうございました。

Twenty Ten テーマ
カスタムメニュー
カスタムタイプ投稿
マルチサイト

と旬の WordPress 3.0 の新機能について各スピーカーがお話しさせていただきました。

私の担当は「カスタムメニュー」でした。
当日の発表資料をアップいたします。
ご覧下さい。

acrobat.com

上記データが表示されないときはリロードするかリンクをクリックして下さい。

懇親会にもたくさんの方に参加していただき、楽しい夜を過ごしました。
思いもかけないゲストにもきていただきました。

め組の組長さんをはじめとするめ組の皆様。
日本語WordPress草創期に多大な貢献をされたtaiさん。
HTML, CSS 辞典シリーズでおなじみの大藤幹さん。
大藤さんの新著は WordPress 3.0 についてです。

スピーカー、スタッフの1人として関われたことを誇りに思います。
こう言えるのもご参加いただいた方がいたからこそです。
至らないところも多々あったのでは無いかと思いますが、ご意見をお寄せいただければ今後の参考にさせていただきます。

繰返しになりますが、本当にありがとうございました。

2010-10-09, WordPress 3.0 会議で話します。


WordPress 3.0 会議

WordPress 3.0 の新機能を紹介するセミナーイベントです。

日時 / DATE :
2010/10/09 15:00 to 18:00
定員 / LIMIT :
60 人
会場 / PLACE :
AQUA博多 B会議室 (福岡県福岡市博多区中洲5丁目3-8 AQUA博多 3F)
URL / URL :
http://wordbench.org/groups/fukuoka

2010/10/9 AQUA博多 15:00 ~ 18:00 で行われる「WordPress 3.0 会議」話します。
「WordPress 3.0 会議」はWordPress 3.0の新機能をコードを追いながら勉強会で行っていた内容をお披露目するものです。
あ〜だ、こ〜だ言いながらできると良いのですが、時間の制約もありそこまでできるのかは分かりませんがセミナーや勉強会よりも敷居は低く、しかも内容は初心者の方から中級・上級な方にも楽しんでもらえるようにと欲張りな内容になっています。

WordPress 3.0 で追加された新機能のうち以下の4項目についてお話しすることになります。

Twenty Ten テーマ
カスタムメニュー
カスタムタイプ投稿
マルチサイト

私はその内「カスタムメニュー」についてお話しします。

このブログにもいくつかエントリーしていますが、勉強会であれこれあれこれ勉強をしたものばかりです。
後日、作成したスライドも公開する予定です。

いよいよ、明日に迫りました。
すでに定員一杯のお申し込みがあるようです。
多くの人との出会いを楽しみにしています。

*補欠のお申し込みはまだ可能です。
当日のキャンセルが出るかもしれません。
ご興味のある方はあきらめずにお申し込み下さい。

ATND
http://atnd.org/events/8285

WordPress, Useragentなグローバル変数

WordPressはUseragentに関するグローバル変数を持っています。

$is_lynx
$is_gecko
$is_IE
$is_winIE
$is_macIE
$is_opera
$is_NS4
$is_safari
$is_chrome
$is_iphone

ブラウザーに合わせた設定を加えたい時とかに便利です。
もとネタ、
10 useful new WordPress hacks
Detect the visitor browser within WordPress

さらにもとネタ
Browser Detection and the body_class() Function

add_filter('body_class','browser_body_class');
function browser_body_class($classes) {
	global $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone;
 
	if($is_lynx) $classes[] = 'lynx';
	elseif($is_gecko) $classes[] = 'gecko';
	elseif($is_opera) $classes[] = 'opera';
	elseif($is_NS4) $classes[] = 'ns4';
	elseif($is_safari) $classes[] = 'safari';
	elseif($is_chrome) $classes[] = 'chrome';
	elseif($is_IE) $classes[] = 'ie';
	else $classes[] = 'unknown';
 
	if($is_iphone) $classes[] = 'iphone';
	return $classes;
}

body_classの出力するクラスへUseragentを入れとこうぜ、な関数ですよね。

/wp-includes/ -> vars.php (source)

WordPress, テーマの選び方

簡単にインストールできるWordPress。
あっという間に終わるインストールのあとはテーマをどうするか決めないといけません。
ガリゴリとゼロから作ってみるのも楽しいけど、色々な人が作ったテーマを試してみるのも勉強になります。

WordPress 3 からは子テーマが作れるので、子テーマで自分なりの改造を施すと何もかも自分で作るより時間の短縮にもなります。

星の数ほどあるテーマの中から選ぶのが大変、あとで泣きをみないように改造しやすくてイケテルテーマを探さなくては・・・

どこで選ぶ

無難に公式テーマ配布ディレクトリでしょうか。
Free Themes Directory

公式ディレクトリ以外でも優れたテーマが配布されていたりしますが、リスクはそれなりに高くなると覚悟した方が良いかもしれません。
テーマのソースを見ることができるスキルは必要になると思います。
悪質な難読化コードを埋め込んでいる例もあるようですから。

何を基準に選ぶ

見た目(外観・デザイン)はCSSなどのスキルがあればどうとでもなるので配布されている時の見た目は関係ない気がします。

それよりも・・・

1.CSS(style.css)を見ましょう
CSSのでき(精度)が低いとあとで泣く目にあいます。

■ グローバルリセットが入っている

* {
	padding:0;
	margin:0;
	outline:0;
}

上側に空く余白がデザイン上不自然になるのを防ぐためWeb デザインでは広く使われている手法でもあるのですが、WordPressではリセットしこのままにしておくと困ったことが起こります。
ビジュアルエディタ上の1行空きが、ブラウザ出力時に反映されなくなります。
WordPressはビジュアルエディタ上の1行空きは、ブラウザ出力時にpタグで囲むことにより表現しようとします。
リセットされたままだと自分が入力した文章が入力時の見た目と出力時では違う矛盾が生じてしまいます。
さらに、入力者から1行空ける方法を奪い取ってしまいます。

*リセット後にp, h1~h6タグなどのもともと行を空けるブロック要素へ bottom プロパティの再設定がされていれば◯
Twenty Tenはグロバールリセットに近い形でほぼ全てのタグの padding, margin を 0 にしていますが再度設定しなおしています。

グローバルリセットをしそのまま放置しているテーマはWordPressへの理解度が低いと思わずにいられません。

■ ループ出力の Class, ID の設定の仕方

/* × */
.alignleft {
}
/* ◯ */
#content .alignleft {
}

CSSスキルに疑念が生じます。

2.Javascriptの読み込み
■ Javascriptの読み込みがハードコードされている。
Javascriptの読み込みはテンプレートタグ wp_enqueue_script でするべきであり、ハードコードしているテーマは他の部分でも信用度は低くせざるを得ません。
http://codex.wordpress.org/Function_Reference/wp_enqueue_script

■ jQueryを “no conflict” mode で使用していない。
WordPress添付のjQueryは “no conflict” mode で提供されています。
ほとんどのプラグイン、テーマはそれに従っています。
そんなことも知らないなら、他もどうなのと考えちゃいます。

3.custom-menuが使える
カスタムメニューはWordPRess 3 から追加された機能です。
グローバルナビやサイドメニュー、フッターナビなどを自在に作れるとても便利な便利な機能です。
この機能が使えないテーマは選択する意味がないように思えます。

4.$wpdbを使ったSQLが使われてたら△
テンプレートタグ、関数で対応していないことをデータベースを直接操作してしまおうとする高度なワザなのですが……..
将来のWordPressのアップグレードでDB構造が変わったりすると困ることがあります。
素早く対応してくれたら良いのですが・・・
いざとなったら自分でメンテナンスしますな覚悟は必要だと思います。

WordPress, 親テーマfunctions.phpのaction, filterを子テーマでremove

WordPress3.0から使える親テーマ機能。
便利なんだけど、親テーマのfunctions.phpで設定されているactionやfilterを子テーマでremoveする方法が分からず悶々としてたけど、ようやく方法が分かりました。

本家Forum : [resolved] can i create child functions.php file for twentyten?
http://wordpress.org/support/topic/can-i-create-child-functionsphp-file-for-twentyten?replies=26

Adeptris さんによれば
after_setup_themeを使えば良いらしい。

/** Tell WordPress to run child_theme_setup()
when the 'after_setup_theme' hook is run.
*/
add_action( 'after_setup_theme', 'child_theme_setup' );
 
/** This function will hold our new calls and over-rides */
if ( !function_exists( 'child_theme_setup' ) ):
function child_theme_setup() {
 
}
endif;

関数 child_theme_setup にremoveを書けば対応できました。
感謝感謝です。

WordPress, 子テーマのための親テーマ作成の心構え – functions.php その2

親テーマ functions.php に add_filter されている関数を子テーマで変更することは困難を極めます。

読み込む順序が
1.子テーマ functions.php
2.親テーマ functions.php
になるからです。

これだと、いくら子テーマ functions.php で remove_filter しても意味がありません。
理論的には何らかの hook を使い最後の最後に remove_filter することは可能かもしれませんが、ワンクリック・インストールのWordPressらしくない解決方法に思えます。

親テーマの functions.php の関数は 全て functions_exists 判定 を入れることを必須条件にしてもらいたいものです。
そうすれば、子テーマでの変更はあっけないほど簡単にできます。
同名の関数を書けば良いだけですから。

Twenty Ten も一部の関数にしか判定が入っておらず不満が残ります。
というか、3.0対応テーマ作成の見本となるべきテーマなので早急に改善して欲しいです。

子テーマの子、孫テーマもありかな。

そうなると、配布テーマの functions.php の関数も 全て functions_exists 判定 が必須ですね。

update 2010-09-22
子テーマでremoveする方法があるので functions_exists が必須という訳では無さそうです。
でも、用意してくれてるとかなり嬉しい。

WordPress, 親テーマfunctions.phpのaction, filterを子テーマでremove