2024年06月14日
カスタマイズ画面に「ユーザ作成メニュ」を追加する方法
外観→カスタマイズの中で表示されるメニュの追加/削除は下記を参照してください。
ここでは外観→カスタマイズの中に下図の様な「ユーザ作成メニュ」を追加する方法を解説します。
親メニュ | 子メニュ |
1.ユーザ作成メニュの作成方法とデータ取得
ユーザ作成メニュはアクションフック:customize_register を利用します。
function add_custom_item($wp_customize){ $wp_customize->add_section($name, $args); // 親メニュの作成 $wp_customize->add_setting($child_name,$args); // 子メニュの作成① $wp_customize->add_control($child_name,$args); // 子メニュの作成② } add_action( 'customize_register', 'add_custom_item' ,10,1);
■アクションフック:customize_registerは、参照変数として$wp_customizeを提供します。
よって6行目の参照変数の数は1になります。
以下にタイプ別にメニュの作成方法を解説していきます。
親メニュは下記関数で作成します。
add_section($name, $args);
$name (文字列)
セクション名(任意名称)を指定します。
$args (配列)
連想配列で下記キーに値を設定します。(=>で値を指定)
'title':タイトルを記述します。
'priority':メニュを表示する位置を数値で指定します。
下記の基本メニュのPriorityを参考に表示位置を数字で指定します。
メニュ | Priority (Order) |
サイト基本情報 | 20 |
カラー | 40 |
ヘッダーメディア | 60 |
背景画像 | 80 |
メニュ | 100 |
ウィジェット | 110 |
ホームページ設定 | 120 |
追加CSS | 200 |
'description':子メニュの先頭に表示されるコメントを指定します。
事例
$wp_customize->add_section( 'section', array( 'title' => 'カスタマイズ・テスト', 'priority' => 83, 'description' => 'タイプ別の入力項目を表示しています。', ));
子メニュは下記の関数で作成します。
1.add_setting( $child_name , $args );
2.add_control( $child_name , $args );
テキスト入力場合
1.add_setting( $child_name , $args );
$child_name (文字列):子メニュの変数名を指定します。
$args (配列) :連想配列で下記キーに値を設定します。(=>で値を指定)
'default':add_control()のデフォルト値を指定します。
'sanitize_callback':下記のテキストの無害化処理を指定します。
'sanitize_text_field'
2.add_control( $child_name , $args );
$child_name (文字列):add_setting()と同じ変数名を指定します。
$args (配列) :連想配列で下記キーに値を設定します。(=>で値を指定)
'section':親メニュのセクション名を指定します
'type':’text’を指定します。
'label':タイトルを設定します
'description':説明文を入力します
事例
$wp_customize->add_setting( 'text_setting', array( 'default' => '', 'sanitize_callback' => 'sanitize_text_field', )); $wp_customize->add_control( 'text_setting', array( 'section' => 'section', 'type' => 'text', 'label' => 'テキスト入力', 'description' => '下記にテキストを入力してください。', ));
子メニュは下記の関数で作成します。
1.add_setting( $child_name , $args );
2.add_control( $child_name , $args );
数値入力場合
1.add_setting( $child_name , $args );
$child_name (文字列):子メニュの変数名を指定します。
$args (配列) :連想配列で下記キーに値を設定します。(=>で値を指定)
'default':add_control()のデフォルト値を指定します。
'sanitize_callback':下記の数値の無害化処理を指定します。
'absint'
2.add_control( $child_name , $args );
$child_name (文字列):add_setting()と同じ変数名を指定します。
$args (配列) :連想配列で下記キーに値を設定します。(=>で値を指定)
'section':親メニュのセクション名を指定します
'type':'number'を指定します。
'label':タイトルを設定します
'description':説明文を入力します
事例
$wp_customize->add_setting( 'number_setting', array( 'default' => 8, 'sanitize_callback' => 'absint' )); $wp_customize->add_control('number_setting', array( 'section' => 'section', 'type' => 'number', 'label' => '数値入力', 'description' => '数値を入力するか選択してください。', ));
子メニュは下記の関数で作成します。
1.add_setting( $child_name , $args );
2.add_control( $child_name , $args );
ラジオBOXの場合
1.add_setting( $child_name , $args );
$child_name (文字列):子メニュの変数名を指定します。
$args (配列) :連想配列で下記キーに値を設定します。(=>で値を指定)
'default':add_control()のデフォルト値を指定します。
'sanitize_callback':下記のラジオBOXの無害化処理を指定します。
function ($input, $setting){ $input = sanitize_key( $input ); $choices = $setting->manager->get_control($setting->id)->choices; return (array_key_exists( $input, $choices ) ? $input : $setting->default ); }
2.add_control( $child_name , $args );
$child_name (文字列):add_setting()と同じ変数名を指定します。
$args (配列) :連想配列で下記キーに値を設定します。(=>で値を指定)
'section':親メニュのセクション名を指定します
'type':'radio'を指定します。
'label':タイトルを設定します
'description':説明文を入力します
'choices':選択肢を連想配列で指定します。
事例
$wp_customize->add_setting( 'radio_setting', array( 'default' => '1', 'sanitize_callback' => function ($input, $setting){ $input = sanitize_key( $input ); $choices = $setting->manager->get_control($setting->id)->choices; return ( array_key_exists( $input, $choices ) ? $input : $setting->default ); } )); $wp_customize->add_control( 'radio_setting', array( 'section' => 'section', 'type' => 'radio', 'label' => 'ラジオBOX選択', 'description' => '下記から選択してください', 'choices' => array( '1' => '項目1', '2' => '項目2') ));
子メニュは下記の関数で作成します。
1.add_setting( $child_name , $args );
2.add_control( $child_name , $args );
チェックBOXの場合
1.add_setting( $child_name , $args );
$child_name (文字列):子メニュの変数名を指定します。
$args (配列) :連想配列で下記キーに値を設定します。(=>で値を指定)
'default':add_control()のデフォルト値を指定します。
'sanitize_callback':下記のチェックBOXの無害化処理を指定します。
function($input){ return (isset( $input ) ? true : false ); }
2.add_control( $child_name , $args );
$child_name (文字列):add_setting()と同じ変数名を指定します。
$args (配列) :連想配列で下記キーに値を設定します。(=>で値を指定)
'section':親メニュのセクション名を指定します
'type':'checkbox'を指定します。
'label':チェックボックスのテキスト。
'description':選択の説明
事例
$wp_customize->add_setting( 'check_setting', array( 'default' => false, 'sanitize_callback' => function($input){ return (isset( $input ) ? true : false ); }, )); $wp_customize->add_control( 'check_setting', array( 'section' => 'section', 'type' => 'checkbox', 'label' => '選択', 'description' => 'テーマ詳細を非表示にする時はチェックして下さい', ));
子メニュは下記の関数で作成します。
1.add_setting( $child_name , $args );
2.add_control(new WP_Customize_Color_Control($wp_customize,$child_name, $args))
カラーパレットの場合
1.add_setting( $child_name , $args );
$child_name (文字列):子メニュの変数名を指定します。
$args (配列) :連想配列で下記キーに値を設定します。(=>で値を指定)
'default':add_control()のデフォルト値を指定します。
'sanitize_callback':下記のチェックBOXの無害化処理を指定します。
'sanitize_text_field'
2.add_control(new WP_Customize_Color_Control($wp_customize,$child_name, $args))
$child_name (文字列):add_setting()と同じ変数名を指定します。
$args (配列) :連想配列で下記キーに値を設定します。(=>で値を指定)
'section':親メニュのセクション名を指定します
'label':タイトルを設定します
'description':説明文を入力します
事例
$wp_customize->add_setting('color_setting', array( 'default' => '#199ece', 'sanitize_callback' => 'sanitize_text_field', )); $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'color_setting', array( 'section' => 'section', 'label' => '色', 'description' => 'カラーコードを指定して下さい,' )));
上記で下記の子メニュが作成されます。
上記で作成したメニュからデータを取得するのは get_theme_mod() 関数を利用します。
上記サンプル事例の場合は下記になります。
<?php echo 'テキスト='.get_theme_mod('text_setting','').'<br/>'; ?> <?php echo '数値='.get_theme_mod('number_setting',8).'<br/>'; ?> <?php echo 'ラジオBOX='.get_theme_mod('radio_setting','1').'<br/>'; ?> <?php echo 'チェックBOX='.get_theme_mod('check_setting',false).'<br/>'; ?> <?php echo 'チェックBOX='.get_theme_mod('color_setting','#199ece').'<br/>'; ?>
2.このサイトで使っている具体的な事例
このサイトでは下記の様なユーザ作成メニュを作成しています。
親メニュ | 子メニュ |
投稿画面のサイドバーの位置を選択するメニュです、 |
|
PC、タブレット、スマホの左右のマージンをカスタマイズできるメニュです。 |
1.上記を作成するプログラムは下記になります。
function add_custom_item($wp_customize){ // 外観→カスタマイズにサイドバーの位置(左右)を設定するメニューを新設する $wp_customize->add_section( 'sidebar_section', array( 'title' => 'サイドバー設定', 'priority' => 81, 'description' => 'サイドバーレイアウトを選択してください。', )); $wp_customize->add_setting( 'sidebar_setting', array( 'default' => 'right', 'sanitize_callback' => function ($input, $setting){ $input = sanitize_key( $input ); $choices = $setting->manager->get_control($setting->id)->choices; return ( array_key_exists( $input, $choices ) ? $input : $setting->default ); } )); $wp_customize->add_control( 'sidebar_setting', array( 'section' => 'sidebar_section', 'label' => 'サイドバー設定', 'description' => 'サイドバー位置を下記から選択して下さい', 'type' => 'radio', 'choices' => array( 'left' => '左', 'right' => '右') )); // 外観→カスタマイズに画面の左右マージン量を設定するメニューを追加する $wp_customize->add_section( 'margin_section', array( 'title' => '画面の左右余白設定', 'description' => '基本マージンは下記になります<br/>修正する場合は値を入れてください。', 'priority' => 82, )); $wp_customize->add_setting( 'margin_pc', array( 'default' => 8, 'sanitize_callback' => 'absint' )); $wp_customize->add_control('margin_pc', array( 'section' => 'margin_section', 'label' => 'PCマージン', 'description' => '修正値は<font color="red">%</font>です', 'type' => 'number', )); $wp_customize->add_setting('margin_sm', array( 'default' => 2, 'sanitize_callback' => 'absint' )); $wp_customize->add_control( 'margin_sm', array( 'section' => 'margin_section', 'label' => 'タブレットマージン', 'description' => '修正値は<font color="red">%</font>です', 'type' => 'number', )); $wp_customize->add_setting('margin_xs', array( 'default' => '0', 'sanitize_callback' => 'absint' )); $wp_customize->add_control( 'margin_xs', array( 'section' => 'margin_section', 'label' => 'スマホマージン', 'description' => '修正値は<font color="red">px</font>です', 'type' => 'number', )); } add_action( 'customize_register', 'add_custom_item',10,1);
2.上記設定を画面に反映させるプログラム。
上記は表示画面をどの様にするか?の設定になるので画面への反映はアクションフック:wp_headを利用します。
function customizer_settings(){ ?> <!-- サイドバーが右か左かの処理 --> <?php if(get_theme_mod('sidebar_setting') == 'left'):?> <style> #post_contener{ align-items:stretch; flex-direction:row;} </style> <?php endif;?> <!-- PCの左右マージンの処理 --> <?php if(get_theme_mod('margin_pc') | get_theme_mod('margin_sm') | get_theme_mod('margin_xs')):?> <style> #header_contener,#menu_contener,#slide_contener,#post_contener,#page_contener,#footer_contener {margin:0 <?php echo get_theme_mod('margin_pc',8);?>%;} @media screen and (min-width:768px) and (max-width:991px){ #header_contener,#menu_contener,#slide_contener,#post_contener,#page_contener,#footer_contener {margin:0 <?php echo get_theme_mod('margin_sm',2);?>%;} } @media screen and (max-width:767px){ #header_contener,#menu_contener,#slide_contener,#post_contener,#page_contener,#footer_contener,#post_sidebar_xs {margin:0 <?php echo get_theme_mod('margin_xs',0);?>px;} } </style> <?php endif;?> <?php }; add_action( 'wp_head', 'customizer_settings');
■上記でCSSを変更していますが、これはテーマがどの様なCSSになっているかで異なります。