Theme Customizer | WordPress
$wp_customize(WP_Customize_Managerのインスタンス)のadd_settingでtypeをtheme_modに設定した場合、wp_optionsテーブルのoption_name列にtheme_mods_が、option_value列にはその値がシリアライズされて格納される(下記例ではtheme_mods_にsampleおよびsample2の値がまとめてシリアライズされて格納される)。
$wp_customize->add_setting(
'sample',
array(
'default' => 'default value',
'type' => 'theme_mod', // theme_modを指定した場合、wp_optionsのoption_nameがtheme_mods_のoption_valueにシリアライズして格納される
'transport' => 'refresh',
'sanitize_callback' => '',
)
);
// ...
$wp_customize->add_setting(
'sample2',
array(
'default' => 'default value',
'type' => 'theme_mod', // theme_modを指定した場合、wp_optionsのoption_nameがtheme_mods_のoption_valueにシリアライズして格納される
'transport' => 'refresh',
'sanitize_callback' => '',
)
);
Customizerのチェックボックス
- チェックあり => 文字列
'1' - チェックなし => 空文字
''
シリアライズした値をMySQLから取り出す
$ mysql -u -p -A -h -e 'select option_value from wp_options where option_name = "theme_mods_";' > theme_mods.txt
unserialize( );
改行されたテキストがシリアライズされているときの対策
改行を含む文字列をそのままシリアライズしている場合、文字列長のカウントがずれてunserialize関数でエラーが発生することがある。
以下のサイトを参考に、いったんシリアライズし直してからunserializeする。
引用元: https://keruuweb.com/php-unserialize-error/
$data = preg_replace_callback( '!s:(\d+):"([\s\S]*?)";!', function ( $m ) {
return 's:' . strlen( $m[2] ) . ':"' . $m[2] . '";';
}, $data );