Slide 1

Slide 1 text

Customizer Uma melhor experiência na personalização de temas

Slide 2

Slide 2 text

˃ Co-Fundador da Haste ˃ Professor na ETEC Guaracy Silveira - 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

Slide 3

Slide 3 text

Customizer Uma melhor experiência na personalização de temas Objetivo: Apresentar 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.

Slide 4

Slide 4 text

WordPress Personalização no início da plataforma 01.

Slide 5

Slide 5 text

WordPress CMS (Content Management System), um software com o propósito de facilitar o gerenciamento de conteúdo. Mas nem sempre foi assim...

Slide 6

Slide 6 text

WordPress 1.2 mingus Interface do WordPress 1.2, mostrando a listagem de posts.

Slide 7

Slide 7 text

WordPress 1.2 mingus - painel administrativo Tela de edição de templates do WordPress 1.2. Aqui era possível modificar alguns templates básicos que modificavam a listagem de posts do WordPress.

Slide 8

Slide 8 text

Temas WordPress 1.5 (Strayhorn) 02.

Slide 9

Slide 9 text

Temas Na versão 1.5 do WordPress foram introduzidos os temas. Os temas controlam o modo como o conteúdo será exibido.

Slide 10

Slide 10 text

Personalização utilizando temas Desenvolvedor: pode desenvolver temas, utilizando PHP, HTML e CSS. Usuário: se limita a utilizar temas desenvolvidos, ou a contratar o serviço de desenvolvimento de um tema.

Slide 11

Slide 11 text

A personalização da personalização 03. Settings API

Slide 12

Slide 12 text

Introdução da Settings API No WordPress 2.7 Coltrane foi introduiza a Settings API, uma API que facilitou a criação de páginas de opções no painel administrativo, seja pra plugins ou temas.

Slide 13

Slide 13 text

Evolução com a Settings API Tema + Personalização de aspectos do tema.

Slide 14

Slide 14 text

Theme Customization API Também conhecido como Customizer 04.

Slide 15

Slide 15 text

Introdução da Theme Customization API Introduzida no WordPress 3.4 (Green). Agora é possível definir elementos gerais da instalação e itens do tema em uma interface única e amigável.

Slide 16

Slide 16 text

Customizer Visualização do site

Slide 17

Slide 17 text

Quais as vantagens da Theme Customization API em relação à 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

Slide 18

Slide 18 text

Anatomia do Customizer Estrutura e componentes 05.

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Panels Panels são utilizados para agrupar e diferenciar o contexto de controles e seções. Resumindo, panels nada mais são do que agrupadores de sections.

Slide 21

Slide 21 text

Section Sections são os containers de controles do Customizer. Você pode definir as suas próprias seções em seu Tema ou Plugin, ou atribuir controles às seções padrão do WordPress.

Slide 22

Slide 22 text

Controls Os controls são os objetos primários de interface do customizer. Cada control deve estar relacionado a uma setting, que será responsável, por exemplo, em salvar as opções definidas no controle.

Slide 23

Slide 23 text

Controls: Tipos Tipos de controles padrão do WordPress. Tipos de 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.

Slide 24

Slide 24 text

Settings As settings gerenciam a visualização em tempo real, o salvamento e a sanitização dos objetos do Customizer. Cada setting é gerenciada por um objeto control. //Settings com todos os seus parâmetros $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. ) ); //Settings com todos os seus parâmetros $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. ) );

Slide 25

Slide 25 text

Settings: Theme_mods x Options A princípio as settings podem ser 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

Slide 26

Slide 26 text

Criando settings, controls, sections e panels 06. Customizer na prática

Slide 27

Slide 27 text

Adicionando o hook Para trabalhar com os objetos do customizer, é 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' );

Slide 28

Slide 28 text

Adicionando uma section Para trabalhar com os objetos do customizer, é preciso utilizar o hook customize_register. $wp_customize->add_section( 'custom_css', array( 'title' => __( 'Custom CSS' ), 'description' => __( 'Add custom CSS here' ), 'panel' => '', // Geralmente não necessário. 'priority' => 160, 'capability' => 'edit_theme_options', 'theme_supports' => '', // Raramente necessário. ) );

Slide 29

Slide 29 text

Adicionando uma setting Adicionar uma setting que irá controlar o 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', ) );

Slide 30

Slide 30 text

Adicionando um control $wp_customize->add_control( 'setting_id', array( 'type' => 'date', // 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', ) );

Slide 31

Slide 31 text

Utilizando as configurações no seu tema Para utilizar os valores das opções criadas no customizer em seu tema, é preciso utilizar uma das duas funções do WordPress: get_theme_mod() ou get_option()

Slide 32

Slide 32 text

Utilizando as configurações no seu tema: exibindo um custom css function my_custom_css_output() { echo '' . get_theme_mod( 'custom_theme_css', '' ) . ''; echo '' . get_option( 'custom_plugin_css', '' ) . ''; } add_action( 'wp_head', 'my_custom_css_output');

Slide 33

Slide 33 text

Default sections para adição de controles

Slide 34

Slide 34 text

Adicionando um panel Adicionando painéis para agrupar sections. Lembrando que 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', ) );

Slide 35

Slide 35 text

Conceitos e aplicações mais elaboradas do customizer 07. Customizer avançado

Slide 36

Slide 36 text

Controles contextuais Defina quando controls, panel e sections serão exibidos, 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ê ) );

Slide 37

Slide 37 text

PostMessage Padrão do customizer: recarregar, com AJAX, a página inteira quando uma mudança em um control é feita. Problemas: pode se tornar lento;

Slide 38

Slide 38 text

Atualização com refresh Atualização com postMessage

Slide 39

Slide 39 text

PostMessage //Passo 1: Definir o parâmetro transport como ‘postMessage’ $wp_customize->add_setting( 'setting_id', array( 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'default' => '', 'transport' => 'postMessage', // ou refresh ) );

Slide 40

Slide 40 text

PostMessage //Passo 2: Carregar o script JavaScript que será responsável 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' );

Slide 41

Slide 41 text

PostMessage //Passo 3: Tratar no JavaScript, a partir do objeto wp.customize, como serão atualizadas as informações da página ( function( $ ) { wp.customize( 'setting_id', function( value ) { value.bind( function( to ) { $( '#custom-theme-css' ).html( to ); } ); } ); } )( jQuery );

Slide 42

Slide 42 text

Demais recursos avançados do Customizer ➔ Selective Refresh ➔ Custom controls, sections, panels ➔ API JavaScript ➔ Templates Underscores https://developer.wordpress.org/themes/advanced-topics/customizer-api/

Slide 43

Slide 43 text

Kirki Toolkit Desenvolva mais rápido 08.

Slide 44

Slide 44 text

kirki.org Criada por Aristeides Stathopoulos Desenvolva mais rápido utilizando a Kirki. Uma camada de simplificação que já lida com os aspectos que seriam mais trabalhosos e repetitivos do customizer.

Slide 45

Slide 45 text

Benefícios da Kirki Capacidade de criar mais de 20 campos 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.

Slide 46

Slide 46 text

Adicionando o um campo na Kirki //Kirki: Adicionando um campo Kirki::add_field( 'minha_config', array( 'settings' => 'minha_setting', 'label' => __( 'Meu Controle', 'text_domain' ), 'section' => 'minha_section', 'type' => 'color', 'priority' => 10, 'default' => 'algum-valor-padrao', 'output' => array( array( 'element' => '.seletor-css', 'property' => 'propriedade-css', 'units' => 'px', ), ) );

Slide 47

Slide 47 text

De personalização do tema a conteúdo 09. Aplicações do customizer

Slide 48

Slide 48 text

Estilização do tema. Se é possível de fazer com CSS, você pode criar opções no customizer para personalização.

Slide 49

Slide 49 text

Utilização dos valores do customizer para modificação de lógica no PHP

Slide 50

Slide 50 text

Many end users of WordPress are non-technically minded. [...] These 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

Slide 51

Slide 51 text

Referências https://codex.wordpress.org/History https://wordpress.org/download/release-archive/ https://codex.wordpress.org/Settings_API https://codex.wordpress.org/Theme_Customization_API https://developer.wordpress.org/themes/advanced-topics/customizer-api/ https://make.wordpress.org/themes/2015/04/22/details-on-the-new-theme-settings-custo mizer-guideline/ http://themefoundation.com/wordpress-theme-customizer/ https://wordpress.org/about/philosophy/ https://make.wordpress.org/core/2016/02/16/selective-refresh-in-the-customizer/

Slide 52

Slide 52 text

Obrigado! [email protected] Github /allysonsouza Facebook /allyson.a.de.souza Twitter /allyson_as