Customizer: Uma melhor experiência na personalização de temas
Palestra apresentada no WordCamp Belo Horizonte 2016, introduzindo o Customizer, seção de funcionalidades voltadas para a personalização de temas do WordPress.
- Extensão Godofredo Furtado no curso de Programação de Jogos Digitais ˃ Graduado em Jogos Digitais pela FATEC São Caetano do Sul ˃ Membro da Comunidade WordPress São Paulo ˃ Contribuidor do WordPress allysonsouza.com.br
como foi a evolução dos recursos de personalização do WordPress, implementação da API de Personalização e o seu estágio atual. Mostrar como o customizer promove uma melhor experiência na personalização de temas WordPress e como utilizá-lo.
Settings API? → Localização centralizada das configurações → Padronização → Pré-visualização em tempo real → Pré-visualização de responsividade (versão 4.5 - Coleman) → Obrigatório para temas do repositório oficial desde 22 de Abril de 2015 → Exibição contextual de opções de acordo com a página do site
controles checkbox | textarea | radio | select | dropdown-pages | text | hidden | number | range | url | tel | email | search | time | date | datetime | week *Obs: Os controles precisam ser atribuídos à uma seção para serem exibidos, seja ela uma seção padrão do WordPress, ou definida em tema ou plugin.
armazenadas de duas formas: theme_mods ou options. Options Salvas na tabela wp_options. Se aplicam ao site independente de qual tema esteja ativo. Theme_mods Dizem respeito e se aplicam ao tema que estiver ativo. PLUGINS TEMAS
é preciso utilizar o hook customize_register. function themeslug_customize_register( $wp_customize ) { // Faça aqui coisas com o $wp_customize, o objeto da WP_Customize_Manager. } add_action( 'customize_register', 'themeslug_customize_register' );
armazenamento das informações de um control. $wp_customize->add_setting( 'setting_id', array( 'type' => 'theme_mod', // or 'option' 'capability' => 'edit_theme_options', 'theme_supports' => '', // Rarely needed. 'default' => '', 'transport' => 'refresh', // or postMessage 'sanitize_callback' => '', 'sanitize_js_callback' => '', // Basically to_json. ) ); //Código padrão para a criação de uma setting de campo de definição de cor hexadecimal $wp_customize->add_setting('setting_id', array( 'default' => '#f72525', 'sanitize_callback' => 'sanitize_hex_color', ) );
Qual o tipo do controle 'priority' => 10, // Prioridade do controle dentro da seção 'section' => 'colors', // Em que seção será exibido 'label' => __( 'Date' ), 'description' => __( 'This is a date control with a red border.' ), 'input_attrs' => array( 'class' => 'my-custom-class-for-js', 'style' => 'border: 1px solid #900', 'placeholder' => __( 'mm/dd/yyyy' ), ), 'active_callback' => 'is_front_page', // Exibição contextual/condicional ) ); // Criação de um controle simples para input de texto $wp_customize->add_control( 'custom_theme_css', array( 'label' => __( 'Custom Theme CSS' ), 'type' => 'textarea', 'section' => 'custom_css', ) );
um panel precisa ter ao menos uma section para ser exibido, e uma section precisa de ao menos um control atribuído para ser exibida. $wp_customize->add_setting( 'setting_id', array( 'type' => 'theme_mod', // or 'option' 'capability' => 'edit_theme_options', 'theme_supports' => '', // Rarely needed. 'default' => '', 'transport' => 'refresh', // or postMessage 'sanitize_callback' => '', 'sanitize_js_callback' => '', // Basically to_json. ) ); //Adiciona um panel $wp_customize->add_panel( 'menus', array( 'title' => __( 'Menus' ), 'description' => $description, 'priority' => 160, ) ); //Adiciona uma section ao panel personalizado (sem nenhuma section atribuída, um panel não é exibido) $wp_customize->add_section( $section_id , array( 'title' => $menu->name, 'panel' => 'menus', ) );
de acordo com a página em que o usuário está. $wp_customize->add_section( 'featured_content', array( 'title' => __( 'Featured Content', 'twentyfourteen' ), 'description' => //... 'priority' => 130, 'active_callback' => 'is_front_page', //Pode ser uma função própria, definida por você ) );
por lidar com a atualização via postMessage function my_preview_js() { wp_enqueue_script( 'custom_css_preview', 'path/to/file.js', array( 'customize-preview', 'jquery' ) ); } add_action( 'customize_preview_init', 'my_preview_js' );
de controle diferentes. (Incluindo Google Fonts e Dashicons) Já lida com a geração de CSS personalizado a partir dos campos de controle. Já lida com postMessage para atualização em tempo real. Não conflitante com a API do WordPress. Apenas uma camada de abstração e simplificação. 1. 2. 3. 4.
are the users that we design the software for as they are ultimately the ones who are going to spend the most time using it for what it was built for. Design for the Majority, WordPress Philosophy