WordPressのテーマカスタマイザーで、入力値を検証するサニタイズ処理を行うことは、恐らくテーマを自作している方ならご存じかと思います。
一般的に、ラジオボタンやセレクトによって選択する項目の場合、以下のサニタイズコールバック関数を追加して、カスタマイザー項目へコールバック関数の呼び出しの記述をすれば、問題なくサニタイズ(検証)してくれます。
以下は、【HABONE】テーマ内のフォントの種類選択に関するコードです。
/* ラジオボタンとセレクトボックス(汎用) */
function habone_sanitize_select($input, $setting) {
$input = sanitize_key($input);
$choices = $setting->manager->get_control($setting->id)->choices;
return (array_key_exists($input, $choices) ? $input : $setting->default);
}
↑これがfunctions.phpなどへ追記するサニタイズコールバック関数
/* フォント種類の選択 */
$wp_customize->add_setting( 'font_type', array(
'default'=>'sans',
'sanitize_callback' => 'habone_sanitize_select',
));
$wp_customize->add_control(
new WP_Customize_Control(
$wp_customize,
'font_type',
array(
'settings'=>'font_type',
'label'=>__('Font Type','habone'),
'description'=>__('Select the font type (Gothic or Mincho).<br>For each character type and priority, check with a developer tool.','habone'),
'section'=>'other_color_section',
'priority'=>130,
'type'=>'select',
'choices'=>array(
'sans'=>__('Sans-Serif','habone'),
'selif'=>__('Serif','habone'),
),
)));
↑4行目でサニタイズコールバック関数を呼び出しています。
このコールバック関数については、検索すれば、国内・海外問わず同じコードがたくさんのサイトで紹介されているので、実際に使っているテーマがほとんどだと思います。
しかしながら、この方法でうまく情報が保存されず、デフォルトに戻ってしまう場合があります。
これはサニタイズ処理で検証に失敗(検証の結果、値が拒否される)して、デフォルト値に戻るという現象なのですが、いろいろとテストをしてみるも、選択肢設定の中に数値のみと数値+テキストが混在する場合に不具合が起こると思われますが確実ではないようです。
そこで、この不具合が発生する項目については、以下のように別の(専用の)サニタイズコールバック関数を用意して、カスタマイザー設定用コードでコールバック関数として呼び出すことで解決できます。
function habone_theme_sanitize_blur( $input ) {
$valid = array(
'値'=>'値',
'値'=>'値',
);
if ( array_key_exists( $input, $valid ) ) {
return $input;
} else {
return '';
}
}
「’値’=>’値’」の部分は同じものが入り、このコールバック関数を使ってサニタイズするカスタマイザー設定の選択肢と完全に一致している必要があります
参考:WPカスタマイザーでsanitize_callbackを選択します(海外のサイトのフォーラム)
まあ、前半で書いているコールバック関数はあくまでも汎用なので、本来はセレクト・ラジオボタンの設定項目に関しては、個別にコールバック関数を作って呼び出すのが一番正確なのでしょうね、という結論でした。