トップページやフロントページ、特定の固定ページでお客さんが自分でコンテンツを変更したいって要望、まぁあるじゃないですか?
大抵はAdvanced Custom Field Proでどうにでもなってたんですが、最近テーマカスタマイザーを触る機会が増えてきたんで忘れないうちに覚書。
たぶんリアルタイムで変更箇所が反映されるのが人気なんでしょうね。
functions.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
<?php //--------------------------------------------------------------------------- // WP Theme Customizer Settings //--------------------------------------------------------------------------- function my_theme_customize_register($wp_customize) { general_customizer($wp_customize); } add_action('customize_register', 'my_theme_customize_register'); function general_customizer($wp_customize) { $prefix = 'general'; $option_name = "${prefix}_options"; $section_name = "${prefix}_section"; $wp_customize->add_section( $section_name, [ 'title' => '全般設定', 'priority' => 1 ] ); //コードが長くなるんで配列にいれる $fields = [ 'general_header_tel' => [ 'label' => '電話番号', 'type' => 'text', 'default' => '00-0000-0000' ], 'general_header_works' => [ 'label' => '営業時間', 'type' => 'text', 'default' => '09:00 - 17:00' ] ]; //フォームコントロール追加 add_customizer_contol($wp_customize, $fields, $option_name, $section_name); } function add_customizer_contol($wp_customize, $fields, $option_name, $section_name) { foreach ((array)$fields as $id => $value) { $default = !empty($value['default']) ? $value['default'] : null; $wp_customize->add_setting( $id, [ 'default' => $default, 'transport' => 'postMessage' ] ); //頻繁な更新が鬱陶しいのでselective_refreshにする $wp_customize->selective_refresh->add_partial( $id, [ 'selector' => "#${id}-customizer", 'container_inclusive' => false, 'render_callback' => function ($partial = null) { return get_theme_mod($partial->id, $default); } ] ); $wp_customize->add_control( //画像使わなきゃこのクラスはいらない new WP_Customize_Image_Control( $wp_customize, "${option_name}_${id}", [ 'settings' => $id, 'label' => $value['label'], 'section' => $section_name, 'type' => !empty($value['type']) ? $value['type'] : 'textarea', 'description' => !empty($value['description']) ? $value['description'] : null, 'choices' => !empty($value['choices']) ? $value['choices'] : null ] ) ); } } ?> |
出力側テンプレート
1 2 3 4 |
<?php echo get_theme_mod('general_header_tel', '00-0000-0000'); echo get_theme_mod('general_header_works', '09:00 - 17:00'); ?> |