#
ドキュメント

Document

自分のための備忘録です。

Theme Cosutomizer

テーマカスタマイズ API

$wp_cusomizeWP_Customize_Managerのインスタンス)のadd_settingtypetheme_modに設定した場合は、wp_optionsテーブルのoption_name列にtheme_mods_{{theme-domain}}が、option_valueに値がシリアライズして格納されます(下記例ではtheme_mods_{{theme-domain}}にsampleおよびsample2の値がシリアライズして格納)。

$wp_customize->add_setting(
        'sample',
        array(
            'default'           => 'default value',
            'type'              => 'theme_mod',  // theme_modを指定した場合 wp_optionsのoption_nameがtheme_mods_{{theme-domain}}のoption_valueにシリアライズして格納される
            'transport'         => 'refresh',
            'sanitize_callback' => '{{ sanitize_callback }}',
        )
    );
...
$wp_customize->add_setting(
        'sample2',
        array(
            'default'           => 'default value',
            'type'              => 'theme_mod',  // theme_modを指定した場合 wp_optionsのoption_nameがtheme_mods_{{theme-domain}}のoption_valueにシリアライズして格納される
            'transport'         => 'refresh',
            'sanitize_callback' => '{{ sanitize_callback }}',
        )
    );

Customizerのチェックボックス

  • チェックあり => 文字列'1'
  • チェックなし => 空文字''

シリアライズした値をMySQLから取り出す

$ mysql -u {user}} -p -A {{db}} -h {{host}}wordpress-db -e 'select option_value from wp_options where option_name = "theme_mods_{{theme-domain}}";' > theme_mods.sql
unserialize(theme_mod.sqlの中身);

改行されたテキストがシリアライズされているときの対抗

改行した文字をシリアライズシている場合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);