Découverte de l'API Customizer
WPTech Nantes 2014
Sommaire
- L'avant-customizer
- Qu'est-ce que le customizer ?
- Utiliser le customizer
- Aller plus loin
- "Decisions, not options"
- Le futur de l'API
L'avant-customizer
L'avant-customizer
C'était ça
L'avant-customizer
De nombreux frameworks d'options différents
- Des interfaces disparates
- Un fourre-tout de paramétrages
- Peu pratique pour les développeurs
- Peu intuitif pour les utilisateurs
Qu'est-ce que le customizer ?
Qu'est-ce que le customizer ?
Une API introduite avec WordPress 3.4 (juin 2012)
Qu'est-ce que le customizer ?
Une base commune pour gérer les options d'un thème
Menu Apparence => Personnaliser
Qu'est-ce que le customizer ?
Idéal pour :
- L'utilisateur : tous les thèmes utilisent la même interface
- Le développeur : un système intégré au core = pérennité, hooks, etc
Qu'est-ce que le customizer ?
WordPress l'utilise pour gérer des réglages par défaut
Qu'est-ce que le customizer ?
Utiliser le customizer
Utiliser le customizer
Un hook : customize_register
function themeslug_customize_register( $wp_customize ) {
// Toutes les sections, réglages et contrôles seront ici
}
add_action( 'customize_register', 'themeslug_customize_register' );
Utiliser le customizer
Une option de thème
Appartient à une section
Se décompose en :
- Un réglage
- Un contrôle
Utiliser le customizer
Créer une section
$wp_customize->add_section( 'themeslug_section_name' , array(
'title' => __( 'Section name', 'themeslug' ),
'description'=> __( 'Section description', 'themeslug' ),
'priority' => 30,
) );
$wp_customize->add_section( $section_id, $args );
Utiliser le customizer
Créer un réglage
$wp_customize->add_setting( 'themeslug[option_name]' , array(
'default' => '',
'transport' => 'refresh', // refresh ou postMessage
'sanitize_callback' => 'sanitize_text_field'
) );
$wp_customize->add_setting( $setting_id, $args );
Utiliser le customizer
Créer un contrôle
$wp_customize->add_control( 'option_name', array(
'label' => __( 'Option Name', 'themeslug' ),
'description' => __( 'Option description', 'themeslug' ),
'section' => 'themeslug_section_name',
'settings' => 'themeslug[option_name]',
'type' => 'text',
'active_callback' => 'is_front_page'
) );
$wp_customize->add_section( $option_id, $args );
Utiliser le customizer
Utiliser le customizer
Type de contrôles
- text (et dérivés HTML 5 : url, email…)
- textarea (depuis WP 4.0)
- checkbox
- select
- radio
- dropdown-pages
Utiliser le customizer
Les contrôles à choix
$wp_customize->add_control('select_radio', array(
'label' => __('Radio options', 'themeslug'),
'section' => 'themename_section_name',
'settings' => 'themeslug[select_radio]',
'type' => 'radio',
'choices' => array(
'value1' => 'Choice 1',
'value2' => 'Choice 2',
'value3' => 'Choice 3',
),
));
Utiliser le customizer
Utilisation de la valeur en front
$theme_options = get_theme_mod( 'themeslug' );
echo $theme_options['option_name'];
get_theme_mod( $options_id, $default );
Aller plus loin
Aller plus loin
Créer un panneau
$wp_customize->add_panel( 'panel_name', array(
'priority' => 200,
'title' => __( 'Panel name', 'themeslug' ),
'description' => __( 'Panel description', 'themeslug' )
) );
Un panneau regroupe des sections
$wp_customize->add_panel( $panel_id, $args );
Aller plus loin
Attribuer une section à un panneau
$wp_customize->add_section( 'themeslug_section_name' , array(
'title' => __( 'Section name', 'themeslug' ),
'description'=> __( 'Section description', 'themeslug' ),
'priority' => 30,
'panel' => 'panel_name'
) );
Aller plus loin
Aller plus loin
Ajouter des attributs à un contrôle
'input_attrs' => array(
'min' => 0,
'max' => 10,
'step' => 2,
'class' => 'test-class test',
'style' => 'color: #0a0',
)
Aller plus loin
Utiliser un contrôle étendu
$wp_customize->add_control(
new WP_Customize_Color_Control(
$wp_customize,
'links_color',
array(
'label' => __( 'Links color', 'themeslug' ),
'section' => 'colors',
'settings' => 'themeslug[links_color]'
)
)
);
Aller plus loin
Aller plus loin
Les contrôles étendus intégrés à l'API
- WP_Customize_Color_Control()
- WP_Customize_Upload_Control()
- WP_Customize_Image_Control()
Aller plus loin
Créer son propre contrôle étendu
class Theme_Custom_Control extends WP_Customize_Control {
public function render_content() { ?>
<label>
<span class="customize-control-title">
<?php echo esc_html( $this->label ); ?>
</span>
</label>
<textarea rows="5" <?php $this->link(); ?>>
<?php echo esc_textarea( $this->value() ); ?>
</textarea>
<?php }
}
Aller plus loin
Prévisualiser les changement en direct
Pré-requis :
- Utiliser "transport" => "postMessage"
- Créer un fichier javascript pour gérer les changements
- Insérer ce JS grâce au hook : customize_preview_init
Aller plus loin
Ajouter le JS de prévisualisation
function themeslug_customizer_live_preview() {
wp_enqueue_script( 'themeslug-customizer',
get_template_directory_uri() . '/js/customizer.js',
array( 'jquery', 'customize-preview' ),
'1.0',
true );
}
add_action( 'customize_preview_init', 'themeslug_customizer_live_preview' );
Hook : customizer_preview_init
Aller plus loin
Changements en direct
( function( $ ) {
wp.customize( 'themeslug[links_color]', function( value ) {
value.bind( function( newval ) {
$( 'a' ).css( 'color', newval );
} );
} );
} )( jQuery );
"Decisions, not options"
Decisions, not options
Ne pas reproduire les même erreurs qu'auparavant
Decisions, not options
Proposez des options pertinentes par rapport à votre thème
Le futur de l'API
Elle sert de base pour des projets en cours
-
Edition du contenu depuis le front-end
-
Nouvelle gestion des menus
Ressources utiles
-
http://codex.wordpress.org/Theme_Customization_API
-
http://remyperona.fr/nouveautes-customizer-wordpress-4/
-
http://ottopress.com/tag/customizer/
Rémy Perona
Développeur/Intégrateur WP
Me retrouver sur :
- http://remyperona.fr
- Twitter : @theloopfr
- Github : https://github.com/Tabrisrp