4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Wordpressのカスタマイザーで設定できるオプションタイプとサンプルコードまとめ

Last updated at Posted at 2020-03-20

カスタマイザーで使えるオプションのタイプ一覧とサンプルコードまとめ。

カスタマイザーの基本構造

カスタマイザーはfunctions.phpに書く。

セクション、設定、コントロール(フォーム)の3つを定義する必要がある。

セクションはグループなので1つでもOK。設定とコントロールは対になってるのでオプションごとに両方とも必要。

function mytheme_customize_register( $wp_customize ) {
  // セクション(グループ)を作成
  $wp_customize->add_section( 'your_section_id' , array(
		'title'      => __( 'Theme Color', 'theme_name' ),
		'priority'   => 21,
	) );
  // データベースに新しい設定項目を登録
	$wp_customize->add_setting( 'your_setting_id' , array(
    'default'   => 'Dark',
		'transport' => 'refresh',
	) );
  // 管理画面に表示するコントローラ(フォーム)を登録
  $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'your_setting_id', array(
    'label'          => __( 'Dark or light theme version?', 'theme_name' ),
    'section'        => 'your_section_id',
    'settings'       => 'your_setting_id',
    'type'           => 'radio',
    'choices'        => array(
      'dark'   => __( 'Dark' ),
      'light'  => __( 'Light' )
    )
  ) ) );
}
add_action( 'customize_register', 'corp_customize_register' );

カスタマイザーで使えるオプションのタイプ

タイプ一覧。

  • テキスト
  • テキストエリア
  • 日付
  • 番号
  • セレクト
  • チェックボックス
  • ラジオボタン
  • 画像アップロード
  • カラー設定

custom-type1.png

テキスト、テキストエリア

テキスト入力ができるオプションを追加。

テキストエリアの場合はtextの部分をtextareaに変更する。

$wp_customize->add_setting( 'text_setting_id', array(
  'capability' => 'edit_theme_options',
  'default' => 'テキスト',
  'sanitize_callback' => 'sanitize_text_field',
) );
$wp_customize->add_control( 'text_setting_id', array(
  'label' => __( 'Custom Text' ),
  'description' => __( 'This is a custom text box.' ),
  'section' => 'your_section_id',
  'type' => 'text', // textareaでテキストエリアに変更可能
) );

日付

カレンダーを追加。

$wp_customize->add_setting( 'date_setting_id', array(
  'capability' => 'edit_theme_options',
  'sanitize_callback' => 'my_sanitize_date',
) );

$wp_customize->add_control( 'date_setting_id', array(
  'label' => __( 'Custom Date' ),
  'description' => __( 'This is a custom date control.' ),
  'section' => 'your_section_id',
  'type' => 'date',
  'input_attrs' => array(
    'placeholder' => __( 'mm/dd/yyyy' ),
  ),
) );
function my_sanitize_date( $input ) {
  $date = new DateTime( $input );
  return $date->format('m-d-Y');
}

番号

番号フォームを追加。

$wp_customize->add_setting( 'number_setting_id', array(
  'capability' => 'edit_theme_options',
  'sanitize_callback' => 'my_sanitize_number',
  'default' => 1,
) );
$wp_customize->add_control( 'number_setting_id', array(
  'label' => __( 'Custom Number' ),
  'description' => __( 'This is a custom number.' ),
  'section' => 'your_section_id',
  'type' => 'number',
) );
function my_sanitize_number( $number, $setting ) {
  $number = absint( $number );
  return ( $number ? $number : $setting->default );
}

セレクト

セレクトフォームを追加。

$wp_customize->add_setting( 'select_setting_id', array(
  'capability' => 'edit_theme_options',
  'sanitize_callback' => 'my_sanitize_select',
  'default' => 'value1',
) );
$wp_customize->add_control( 'select_setting_id', array(
  'label' => __( 'Custom Select Option' ),
  'description' => __( 'This is a custom select option.' ),
  'section' => 'your_section_id',
  'type' => 'select',
  'choices' => array(
    'value1' => __( 'Value 1' ),
    'value2' => __( 'Value 2' ),
    'value3' => __( 'Value 3' ),
  ),
) );
function my_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 );
}

チェックボックス

チェックボックスを追加。

$wp_customize->add_setting( 'checkbox_setting_id', array(
  'capability' => 'edit_theme_options',
  'sanitize_callback' => 'my_sanitize_checkbox',
) );
$wp_customize->add_control( 'checkbox_setting_id', array(
  'label' => __( 'Custom Checkbox' ),
  'description' => __( 'This is a custom checkbox input.' ),
  'section' => 'your_section_id',
  'type' => 'checkbox',
) );
function my_sanitize_checkbox( $checked ) {
  // Boolean check.
  return ( ( isset( $checked ) && true == $checked ) ? true : false );
}

ラジオボタン

ラジオボタンを追加。

$wp_customize->add_setting( 'radio_setting_id', array(
  'capability' => 'edit_theme_options',
  'default' => 'blue',
  'sanitize_callback' => 'my_sanitize_radio',
) );
$wp_customize->add_control( 'radio_setting_id', array(
  'label' => __( 'Custom Radio Selection' ),
  'description' => __( 'This is a custom radio input.' ),
  'section' => 'your_section_id',
  'type' => 'radio',
  'choices' => array(
    'red' => __( 'Red' ),
    'blue' => __( 'Blue' ),
    'green' => __( 'Green' ),
  ),
) );
function my_sanitize_radio( $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_setting( 'media_setting_id', array(
  'sanitize_callback' => 'absint',
  'validate_callback' => 'my_sanitize_file',
) );
$wp_customize->add_control(
  new WP_Customize_Media_Control( $wp_customize, 'media_setting_id', array(
    'label' => __( 'Custom Core Media Setting' ),
    'description' => __( 'This is a Image Upload' ),
    'section' => 'your_section_id',
    'mime_type' => 'image',
)	)	);
function my_sanitize_file( $file, $setting ) {
  //allowed file types
  $mimes = array(
    'jpg|jpeg|jpe' => 'image/jpeg',
    'gif'          => 'image/gif',
    'png'          => 'image/png'
  );
    
  //check file type from file name
  $file_ext = wp_check_filetype( $file, $mimes );
    
  //if file has a valid mime type return it, otherwise return default
  return ( $file_ext['ext'] ? $file : $setting->default );
}

カラー設定

カラーの設定オプションを追加。

$wp_customize->add_setting( 'color_setting_id', array(
  'sanitize_callback' => 'sanitize_hex_color',
) );
$wp_customize->add_control(
  new WP_Customize_Color_Control( $wp_customize, 'color_setting_id',
  array(
    'label' => __( 'Core Color Setting' ),
    'description' => __( 'Select a color for something' ),
    'section' => 'your_section_id',
) ) );
4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?