customizer画面
customizerとは、管理画面の外観 > カスタマイズから利用できる画面で、WordPressの直感的な変更が可能になります。
この customizerという仕組みがどう動いているのか、以下が一番わかりやすかったです。ただ、処理全体をしっかりと追って理解することはできなかったので、今後の課題とします。
customizer.php
<?php
/**
* _s Theme Customizer
*
* @package _s
*/
/**
* Add postMessage support for site title and description for the Theme Customizer.
*
* @param WP_Customize_Manager $wp_customize Theme Customizer object.
*/
function _s_customize_register( $wp_customize ) {
$wp_customize->get_setting( 'blogname' )->transport = 'postMessage';
$wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage';
$wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage';
if ( isset( $wp_customize->selective_refresh ) ) {
$wp_customize->selective_refresh->add_partial( 'blogname', array(
'selector' => '.site-title a',
'render_callback' => '_s_customize_partial_blogname',
) );
$wp_customize->selective_refresh->add_partial( 'blogdescription', array(
'selector' => '.site-description',
'render_callback' => '_s_customize_partial_blogdescription',
) );
}
}
add_action( 'customize_register', '_s_customize_register' );
/**
* Render the site title for the selective refresh partial.
*
* @return void
*/
function _s_customize_partial_blogname() {
bloginfo( 'name' );
}
/**
* Render the site tagline for the selective refresh partial.
*
* @return void
*/
function _s_customize_partial_blogdescription() {
bloginfo( 'description' );
}
/**
* Binds JS handlers to make Theme Customizer preview reload changes asynchronously.
*/
function _s_customize_preview_js() {
wp_enqueue_script( '_s-customizer', get_template_directory_uri() . '/js/customizer.js', array( 'customize-preview' ), '20151215', true );
}
add_action( 'customize_preview_init', '_s_customize_preview_js' );
postMessage support
customizerでは、変更適用前から変更適用後のページの変更に、refreshまたはpostMessageという方法を選べます。postMessageとrefreshでどのように違ってくるかは、以下が分かりやすいです。
Using PostMessage For Improved Setting Previewing
$wp_customize->selective_refresh->add_partial
‘selector’で要素を指定、’render_callback’で書き換える関数を指定することで、customizer画面の右側でその要素の選択して変更ができるようになります。
$wp_customize->selective_refresh->add_partial( 'blogname', array( 'selector' => '.site-title a', 'render_callback' => '_s_customize_partial_blogname', ) ); $wp_customize->selective_refresh->add_partial( 'blogdescription', array( 'selector' => '.site-description', 'render_callback' => '_s_customize_partial_blogdescription', ) );
$wp_customize->get_setting( ‘blogname’ )->transport = ‘postMessage’;
対象のtransportを’postMessage’にすることで、非同期に変更するためのjavascriptが適用できるようになります。
$wp_customize->get_setting( 'blogname' )->transport = 'postMessage'; $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage';
wp_enqueue_script( ‘_s-customizer’, get_template_directory_uri() . ‘/js/customizer.js’, array( ‘customize-preview’ ), ‘20151215’, true );
非同期処理のためのjavascriptを読み込みます。
function _s_customize_preview_js() {
wp_enqueue_script( '_s-customizer', get_template_directory_uri() . '/js/customizer.js', array( 'customize-preview' ), '20151215', true );
}
add_action( 'customize_preview_init', '_s_customize_preview_js' );