WordPress.orgに新しいテーマを申請してから3カ月目となる。
担当レビュアーに「Nice Job!」と褒められたかと思えば、先輩(シニアレビュアー)が出てきて「ここがダメあそこがダメ」とやり直し。Fixして再申請でなんとかapproved(承認)。
ところが先輩は「作者URLに問題アリ」と、まさかの激オコ。作者URLといえば本ブログだ。何がダメなんじゃー!?理由が分からずも面倒なので作者URLをWordPress.orgのプロフィールに差し替えて再申請した。
すると別の先輩(?)から「テーマカスタマイザーでサニタイズしてください」との指摘とともに、ステータスが reopened(再開)に降格してしまった。
テーマレビューではapprovedまで行けばあとはLive(公式ディレクトリでの公開)を待つばかりと油断していたら、逆戻りすることもあるのだった。
そして、サニタイズってなんじゃー!?
テーマカスタマイザー
テーマカスタマイザーは、テーマ独自の設定を行うためのインタフェースだ。設置できる項目のタイプにはカラーピッカーやチェックボックス、画像、テキストなどがある。これらフォームの入力要素を利用することで、ダッシュボードよりテーマのカスタマイズが可能となる。
デフォルトでは背景色、ヘッダータイトルの色、画像、ナビゲーション、ウィジェットなどを、どのテーマでも指定できるようになっている。さらに設定したい項目があれば、ここに項目やセクションを追加していけばよい。
例としてリンク色の項目を追加してみよう。ここではあらかじめ用意されている「色」セクション(colors)に項目を追加する。
1 2 3 4 5 6 7 8 9 10 |
$wp_customize->add_setting( 'link_color', array( 'default' => '#0000CC', 'sanitize_callback' => 'maybe_hash_hex_color', ) ); $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'link_color', array( 'label' => 'リンク色', 'section' => 'colors', 'settings' => 'link_color', ) ) ); |
「色」セクションに、リンク色のカラーピッカーが追加された。
色コードのサニタイズ
$wp_customize->add_setting()のパラメータsanitize_callbackで設定値のサニタイズを行うコールバック関数を指定する。フォームから想定外の(あるいは悪意のある)値が入らないようにチェックし変換するための関数を用意するのだ。
色コードの場合は、WordPressに用意されているコールバック関数 maybe_hash_hex_color としておけばよい。
チェックボックスのサニタイズ
さらに、リンク下線(あり・なし)をチェックボックスで追加してみよう。
1 2 3 4 5 6 7 8 9 10 11 |
$wp_customize->add_setting( 'link_underline', array( 'default' => true, 'sanitize_callback' => 'my_sanitize_checkbox', ) ); $wp_customize->add_control( link_underline', array( 'label' => 'リンク下線', 'section' => 'colors', 'type' => 'checkbox', 'settings' => 'link_underline', ) ); |
チェックボックスの値をサニタイズするためのコールバック関数 my_sanitize_checkbox を用意する。
1 2 3 4 5 6 7 8 |
function my_sanitize_checkbox( $input ) { if ( $input == true ) { return true; } else { return false; } } |
link_underlineの値はtrue(1)かfalse(0)のみが設定されるようになる。
設定をテーマに反映する
テーマカスタマイザーで設定したリンク色、リンク下線をテーマに反映しよう。
設定された値を取得する際は、エスケープを忘れずに。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
function my_header_style() { $link_color = esc_attr( get_theme_mod( 'link_color', '#0000CC' ) ); $link_underline = get_theme_mod( 'link_underline', true ) ? 'underline' : 'none'; ?> a { color: ; text-decoration: ; } } function my_setup() { $custom_header_support = array( 'wp-head-callback' => 'my_header_style', ); add_theme_support( 'custom-header', $custom_header_support ); } add_action( 'after_setup_theme', 'my_setup' ); |
このようにsanitize_callbackを追加したテーマを再申請したところ、ふたたび approved(承認)となった。
今度こそLive(公開)となるか!?
オマケ:作者URLの問題
ところで今回のテーマレビューで問題となったAuthor URI(作者URL)である。
過去に公開したテーマやプラグインではもちろん本ブログを作者URLにしている。WordPressについてこんなに真面目に書いているブログなのに、どうして作者URLに適さないのか?一度スルーされるも再度問い合わせてみると、「とにかくダメなんだ。公開中のテーマについても作者URLは変更すべき」とのこと。
理由は教えてくれない。これ以上しつこくすると承認されない恐れがあるので、おとなしく変更した次第だ。
もしかして、ブログのタイトル「データベースに接続できません」がお気に召さなかったのでしょうか?