SlideShare una empresa de Scribd logo
SÁCALE PARTIDO
AL PERSONALIZADOR
Pablo López
@desarrollowp
¿QUÉ ES?
Es un framework para previsualizar configuraciones en
nuestro sitio (v 3.4)
¿PARA QUÉ SE UTILIZA?
En el personalizador encontramos por defecto opciones de
configuración como:
- Identidad del sitio (título, descripción, logo…)
- Gestión de Menús
- Gestión de Widgets
- Portada
Muchos temas y plugins utilizan el personalizador para
ofrecer al usuario opciones de configuración propias:
- Colores y estilos
- API keys
- Layouts
- Claims
¿DE QUÉ CONSTA?
4 Objetos: Panels, Sections, Controls y Settings
PANELS
Los Panels son elementos contenedores de Sections. Un
nivel adicional de jerarquía
SECTIONS
Las Sections son contenedores (UI) para Controls
CONTROLS
Son elementos (UI) para establecer datos. Inputs de
diferentes tipos
SETTINGS
Es la asociación del Control con el dato que se almacena
en BBDD.
UN POCO DE CÓDIGO…
Necesitamos crear una función en el archivo functions.php
de nuestro tema o en nuestro plugin, y añadirla al hook
‘customize_register’
function themeslug_customize_register( $wp_customize ) {
// Do stuff with $wp_customize, the WP_Customize_Manager object.
}
add_action( 'customize_register', 'themeslug_customize_register' );
Importante: Es recomendable el uso de prefijos para
cualquier ID de los objetos que vamos a crear a
continuación para evitar conflictos
MÉTODOS
Para cada objeto: add_, get_ y remove_
$wp_customize->add_panel();
$wp_customize->get_panel();
$wp_customize->remove_panel();
$wp_customize->add_section();
$wp_customize->get_section();
$wp_customize->remove_section();
$wp_customize->add_setting();
$wp_customize->get_setting();
$wp_customize->remove_setting();
$wp_customize->add_control();
$wp_customize->get_control();
$wp_customize->remove_control();
PRIORIDAD
Podremos establecer el orden de nuestros elementos
teniendo en cuenta que por defecto:
THEME_MODS VS OPTIONS
¿Opciones del tema u Opciones generales?
AÑADIENDO UN PANEL
Usando el método add_panel
$wp_customize->add_panel( 'panel_id', array(
'priority' => 160,
'capability' => 'edit_theme_options',
'theme_supports' => '', // Rarely needed
'title' => __( 'Título Panel', 'your_textdomain' ),
'description' => __( 'Descripción Panel', 'your_textdomain' ),
) );
AÑADIENDO UN SECTION
Usando el método add_section
$wp_customize->add_section( 'section_id', array(
'panel' => 'panel_id', // Not typically needed.
'priority' => 160,
'capability' => 'edit_theme_options',
'theme_supports' => '', // Rarely needed.
'title' => __( 'Título Section', 'your_textdomain' ),
'description' => __( 'Descripción Section', 'your_textdomain' ),
) );
AÑADIENDO UN SETTING
Usando el método add_setting. Estableceremos el nombre
y el tipo de dato que guardaremos en BBDD. Podremos
establecer un valor por defecto y además validar y
sanitizar el dato antes de guardarlo
$wp_customize->add_setting( 'setting_id', array(
'type' => 'theme_mod', // or 'option'
'capability' => 'edit_theme_options',
'theme_supports' => '', // Rarely needed.
'default' => '', // Ej: #000000
'transport' => 'refresh', // or postMessage
'sanitize_callback' => '', // Ej: ‘sanitize_hex_color’
'sanitize_js_callback' => '', // Basically to_json.
) );
AÑADIENDO UN CONTROL
Usando el método add_control. Al añadir el control lo
asociamos al Setting. También indicamos a que Section
pertenece, así como el tipo, título, descripción, etc…
$wp_customize->add_control( 'setting_id', array(
'type' => 'date',
'priority' => 10, // Within the section.
'section' => 'section_id', // Required, core or custom.
'label' => __( 'Fecha', 'your_textdomain' ),
'description' => __( 'Descripción', 'your_textdomain' ),
'input_attrs' => array(
'class' => 'my-custom-class-for-js',
'style' => 'border: 1px solid #900',
'placeholder' => __( 'dd/mm/yyyy', 'your_textdomain' ),
),
'active_callback' => 'is_front_page',
) );
TIPOS DE CONTROLS
Podemos usar los siguientes tipos de controles:
• HTML inputs: text, hidden, number, range, url, tel,
email, search, time, date, datetime, y week
(Dependiendo de la compatibilidad del navegador)
• checkbox
• textarea
• radio (las opciones las pasaremos por el parámetro
choices)
• select (las opciones las pasaremos por el parámetro
choices)
• dropdown-pages
• controles personalizados
TIPOS DE CONTROLS: EJEMPLOS
$wp_customize->add_control( 'setting_id', array(
'type' => 'range',
'section' => 'section_id',
'label' => __( 'Etiqueta', 'your_textdomain' ),
'input_attrs' => array(
'min' => 0,
'max' => 10,
'step' => 2,
),
) );
$wp_customize->add_control( 'setting_id', array(
'type' => 'radio',
'section' => 'section_id',
'label' => __( 'Etiqueta', 'your_textdomain' ),
'choices' => array(
'on' => __( 'On', 'your_textdomain' ),
'off' => __( 'Off', 'your_textdomain' ),
),
) );
$categories = get_categories();
$cats = array();
foreach($categories as $category) {
$cats[$category->slug] = $category->name;
}
$wp_customize->add_control( 'setting_id', array(
'type' => 'select',
'section' => 'section_id',
'label' => __( 'Etiqueta', 'your_textdomain' ),
'choices' => $cats
) );
$wp_customize->add_control( 'setting_id', array(
'type' => ‘dropdown-pages',
'section' => 'section_id',
'label' => __( 'Etiqueta', 'your_textdomain' ),
) );
WP_CUSTOMIZE_COLOR_CONTROL
$wp_customize->add_control( new WP_Customize_Color_Control (
$wp_customize, 'setting_id', array(
'label' => __( 'Etiqueta', 'your_textdomain' ),
'section' => 'section_id', // Required, core or custom.
) );
WP_CUSTOMIZE_MEDIA_CONTROL
$wp_customize->add_control( new WP_Customize_Media_Control (
$wp_customize, 'setting_id', array(
'mime_type' => 'image', // image, audio, video, application
'label' => __( 'Etiqueta', 'your_textdomain' ),
'section' => 'section_id', // Required, core or custom.
) );
EXTENDIENDO OBJETOS
Podemos crear Panels, Sections, Controls y Settings
personalizados extendiendo las clases asociadas con cada
objeto: WP_Customize_Panel, WP_Customize_Section,
WP_Customize_Control y WP_Customize_Setting:
class WP_New_Menu_Customize_Control extends WP_Customize_Control {
public $type = 'new_menu';
public function render_content() {?>
<button class="button button-primary" id="create-new-menu-submit"
tabindex="0"><?php _e( 'Create Menu', 'your_textdomain' ); ?></button>;
<?php }
}
VALIDACIONES
El personalizador nos permite validar y sanitizar nuestras
opciones antes de guardar en base de datos
$wp_customize->add_setting( 'setting_id', array(
'sanitize_callback' => 'absint',
'validate_callback' => 'validate_established_year'
) );
function validate_established_year( $validity, $value ) {
$value = intval( $value );
if ( empty( $value ) || ! is_numeric( $value ) ) {
$validity->add( 'required', __( 'Año no válido', 'your_textdomain' ) );
} elseif ( $value < 1900 ) {
$validity->add( 'year_too_small', __( 'Menor de 1900', 'your_textdomain' ) );
} elseif ( $value > gmdate( 'Y' ) ) {
$validity->add( 'year_too_big', __( 'Mayor que actual', 'your_textdomain' ) );
}
return $validity;
}
MULTI-IDIOMA
Tanto WPML como Polylang disponen de la función
icl_get_languages para obtener los idiomas activos de un
sitio
Array (
[es] => Array (
[id] => 2
[active] => 1
[native_name] => Español
[missing] => 1
[translated_name] =>
[language_code] => es
[country_flag_url] => http://wcs16.com/wp-content/plugins/polylang/flags/es.png
[url] => http://wcsantander16.com/es/
)
)
MULTI-IDIOMA
function themeslug_customize_register( $wp_customize ) {
$langs = (function_exists('icl_get_languages')) ? icl_get_languages('skip_missing=N') :
array( 'es' => array( 'language_code' => ‘es’));
$wp_customize->add_section( 'section_id', array(
'title' => __( 'Título Section', 'your_textdomain' ),
'description' => __( 'Descripción Section', 'your_textdomain' ),
) );
foreach($langs as $lang) {
$wp_customize->add_setting( 'setting_id_' . $lang['language_code'], array(
'type' => 'theme_mod',
'capability' => 'edit_theme_options',
) );
$wp_customize->add_control( 'setting_id_' . $lang['language_code'], array(
'type' => 'text',
'section' => 'section_id',
'label' => __( 'Título', 'your_textdomain' ) . " " . $lang['native_name'],
) );
}
}
add_action( 'customize_register', 'themeslug_customize_register' );
MULTI-IDIOMA
¡ESTO ES TODO AMIG@S!
Pablo López Mestre
@desarrollowp
desarrollowp.com
WP Manager en VASS digital
¡Gracias por vuestra asistencia!

Más contenido relacionado

La actualidad más candente

Php excel
Php excelPhp excel
Php excelpcuseth
 
Informe grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuencaInforme grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuenca
paulcuenca9
 
WordCamp Cantabria - Código mantenible con WordPress
WordCamp Cantabria  - Código mantenible con WordPressWordCamp Cantabria  - Código mantenible con WordPress
WordCamp Cantabria - Código mantenible con WordPress
Asier Marqués
 
ActiveRecord: Deja que Postgres lo haga
ActiveRecord: Deja que Postgres lo hagaActiveRecord: Deja que Postgres lo haga
ActiveRecord: Deja que Postgres lo haga
Roberto Quintanilla González
 
Código mantenible, en Wordpress.
Código mantenible, en Wordpress.Código mantenible, en Wordpress.
Código mantenible, en Wordpress.
Asier Marqués
 
Manual script usuarios masivos
Manual script usuarios masivosManual script usuarios masivos
Manual script usuarios masivosYimy Pérez Medina
 
Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)Jsrfs Montemayor
 
SQL - Structured Query Language
SQL - Structured Query LanguageSQL - Structured Query Language
SQL - Structured Query Language
Juan Gabriel Gomila Salas
 
Doctrine2 sf2Vigo
Doctrine2 sf2VigoDoctrine2 sf2Vigo
Doctrine2 sf2Vigo
Ignacio Martín
 
Silex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPSilex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHP
Javier Eguiluz
 

La actualidad más candente (14)

Php excel
Php excelPhp excel
Php excel
 
Informe grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuencaInforme grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuenca
 
WordCamp Cantabria - Código mantenible con WordPress
WordCamp Cantabria  - Código mantenible con WordPressWordCamp Cantabria  - Código mantenible con WordPress
WordCamp Cantabria - Código mantenible con WordPress
 
Ddl
DdlDdl
Ddl
 
Introducción a DJango
Introducción a DJangoIntroducción a DJango
Introducción a DJango
 
ActiveRecord: Deja que Postgres lo haga
ActiveRecord: Deja que Postgres lo hagaActiveRecord: Deja que Postgres lo haga
ActiveRecord: Deja que Postgres lo haga
 
Código mantenible, en Wordpress.
Código mantenible, en Wordpress.Código mantenible, en Wordpress.
Código mantenible, en Wordpress.
 
Introducción a Flask
Introducción a FlaskIntroducción a Flask
Introducción a Flask
 
Manual script usuarios masivos
Manual script usuarios masivosManual script usuarios masivos
Manual script usuarios masivos
 
Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)
 
Consultas
ConsultasConsultas
Consultas
 
SQL - Structured Query Language
SQL - Structured Query LanguageSQL - Structured Query Language
SQL - Structured Query Language
 
Doctrine2 sf2Vigo
Doctrine2 sf2VigoDoctrine2 sf2Vigo
Doctrine2 sf2Vigo
 
Silex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPSilex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHP
 

Similar a Sacale partido al personalizador

Desarrollo de Themes de WordPress desde cero. @DarioBF en @WPBilbao
Desarrollo de Themes de WordPress desde cero. @DarioBF en @WPBilbaoDesarrollo de Themes de WordPress desde cero. @DarioBF en @WPBilbao
Desarrollo de Themes de WordPress desde cero. @DarioBF en @WPBilbao
Darío BF
 
EXAMEN
EXAMENEXAMEN
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryJavier P.
 
WordPress Custom Post Types
WordPress Custom Post TypesWordPress Custom Post Types
WordPress Custom Post Types
Jesus Parrado Alameda
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
Javier P.
 
Presentacion YII
Presentacion YIIPresentacion YII
Presentacion YII
Lenin Hernandez
 
Tips Bootstrap 3 en Drupal 7
Tips Bootstrap 3 en Drupal 7Tips Bootstrap 3 en Drupal 7
Tips Bootstrap 3 en Drupal 7
SuperSoft
 
Presentacion sobre cassandra
Presentacion sobre cassandraPresentacion sobre cassandra
Presentacion sobre cassandra
jesusnoseq
 
M. carrito d compra en phpfinal
M. carrito d compra en phpfinalM. carrito d compra en phpfinal
M. carrito d compra en phpfinal
Abyliel Garcia
 
Php y my sql con manejo de sesiones
Php y my sql con manejo de sesionesPhp y my sql con manejo de sesiones
Php y my sql con manejo de sesionescapo1988
 
APIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptxAPIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptx
MarlonAlbertoGalvis
 
Tuning fondo-negro-2
Tuning fondo-negro-2Tuning fondo-negro-2
Tuning fondo-negro-2
Felipe Ciau Cante
 
La potencia sin control no sirve de nada, claves para aprovechar el uso de Wo...
La potencia sin control no sirve de nada, claves para aprovechar el uso de Wo...La potencia sin control no sirve de nada, claves para aprovechar el uso de Wo...
La potencia sin control no sirve de nada, claves para aprovechar el uso de Wo...
Asociación Webmasters Cantabria
 
Gustavo php
Gustavo phpGustavo php
Gustavo phpGustavo
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysqlI LG
 

Similar a Sacale partido al personalizador (20)

Desarrollo de Themes de WordPress desde cero. @DarioBF en @WPBilbao
Desarrollo de Themes de WordPress desde cero. @DarioBF en @WPBilbaoDesarrollo de Themes de WordPress desde cero. @DarioBF en @WPBilbao
Desarrollo de Themes de WordPress desde cero. @DarioBF en @WPBilbao
 
EXAMEN
EXAMENEXAMEN
EXAMEN
 
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQuery
 
WordPress Custom Post Types
WordPress Custom Post TypesWordPress Custom Post Types
WordPress Custom Post Types
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
Php2
Php2 Php2
Php2
 
Presentacion YII
Presentacion YIIPresentacion YII
Presentacion YII
 
Tips Bootstrap 3 en Drupal 7
Tips Bootstrap 3 en Drupal 7Tips Bootstrap 3 en Drupal 7
Tips Bootstrap 3 en Drupal 7
 
Presentacion sobre cassandra
Presentacion sobre cassandraPresentacion sobre cassandra
Presentacion sobre cassandra
 
Julissa huaman hilari
Julissa huaman hilariJulissa huaman hilari
Julissa huaman hilari
 
M. carrito d compra en phpfinal
M. carrito d compra en phpfinalM. carrito d compra en phpfinal
M. carrito d compra en phpfinal
 
Php y my sql con manejo de sesiones
Php y my sql con manejo de sesionesPhp y my sql con manejo de sesiones
Php y my sql con manejo de sesiones
 
APIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptxAPIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptx
 
Jacqueline nuñez pacco
Jacqueline nuñez paccoJacqueline nuñez pacco
Jacqueline nuñez pacco
 
Jacqueline nuñez pacco
Jacqueline nuñez paccoJacqueline nuñez pacco
Jacqueline nuñez pacco
 
Tuning fondo-negro-2
Tuning fondo-negro-2Tuning fondo-negro-2
Tuning fondo-negro-2
 
La potencia sin control no sirve de nada, claves para aprovechar el uso de Wo...
La potencia sin control no sirve de nada, claves para aprovechar el uso de Wo...La potencia sin control no sirve de nada, claves para aprovechar el uso de Wo...
La potencia sin control no sirve de nada, claves para aprovechar el uso de Wo...
 
Gustavo php
Gustavo phpGustavo php
Gustavo php
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysql
 
Funciones
FuncionesFunciones
Funciones
 

Último

blog.pdf de coceptos de personalidad....
blog.pdf de coceptos de personalidad....blog.pdf de coceptos de personalidad....
blog.pdf de coceptos de personalidad....
JosvilAngel
 
derecho penal busqueda de pruebas en el derecho penal peruano latinoamericano
derecho penal busqueda de pruebas en el derecho penal peruano latinoamericanoderecho penal busqueda de pruebas en el derecho penal peruano latinoamericano
derecho penal busqueda de pruebas en el derecho penal peruano latinoamericano
edwinchiri2
 
Presentación Arduino, proyecto colectivo
Presentación Arduino, proyecto colectivoPresentación Arduino, proyecto colectivo
Presentación Arduino, proyecto colectivo
juanlemus11122
 
Diapositiva Herramientas Web, Tema Web 3.0.pptx
Diapositiva Herramientas Web, Tema Web 3.0.pptxDiapositiva Herramientas Web, Tema Web 3.0.pptx
Diapositiva Herramientas Web, Tema Web 3.0.pptx
erick502105
 
10. Táctica y Estrategia en Fútbol autor Oscar Milton Rivas (1).pdf
10. Táctica y Estrategia en Fútbol autor Oscar Milton Rivas (1).pdf10. Táctica y Estrategia en Fútbol autor Oscar Milton Rivas (1).pdf
10. Táctica y Estrategia en Fútbol autor Oscar Milton Rivas (1).pdf
XxsmalXxYT
 
Estructuras b-sicas_ conceptos b-sicos de programaci-n.pdf
Estructuras b-sicas_  conceptos b-sicos de programaci-n.pdfEstructuras b-sicas_  conceptos b-sicos de programaci-n.pdf
Estructuras b-sicas_ conceptos b-sicos de programaci-n.pdf
edepjuanorozco
 
SEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
SEGURIDAD INFORMATICA- Ariana Vicente CruzattSEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
SEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
vicenteariana54
 
Biografía Eugenio Díaz Castro su vida y su libros
Biografía Eugenio  Díaz Castro su vida y su librosBiografía Eugenio  Díaz Castro su vida y su libros
Biografía Eugenio Díaz Castro su vida y su libros
jhannimejia
 
Clases de Informática primaria para niños de colegios católicos
Clases de Informática primaria para niños de colegios católicosClases de Informática primaria para niños de colegios católicos
Clases de Informática primaria para niños de colegios católicos
mcavero2019
 
Los derechos de autor y Ética Profesional
Los derechos de autor y Ética ProfesionalLos derechos de autor y Ética Profesional
Los derechos de autor y Ética Profesional
bgonzalezm20
 
5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx
5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx
5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx
AlexanderCR12
 
ayuda en egresos exposición aps 1 grupal
ayuda en egresos exposición aps 1 grupalayuda en egresos exposición aps 1 grupal
ayuda en egresos exposición aps 1 grupal
jesusmedina766305
 
EduLearnIAappde IAparatodosdisponible.pptx
EduLearnIAappde IAparatodosdisponible.pptxEduLearnIAappde IAparatodosdisponible.pptx
EduLearnIAappde IAparatodosdisponible.pptx
Elizabeth Mejia
 
WordPress training basics - básicos de cómo enseñar WordPress
WordPress training basics - básicos de cómo enseñar WordPressWordPress training basics - básicos de cómo enseñar WordPress
WordPress training basics - básicos de cómo enseñar WordPress
Fernando Tellado
 
FISICA IMPRIMIR MATERIAL ACADEMICO NIVEL SECUNDARIO
FISICA IMPRIMIR MATERIAL ACADEMICO NIVEL SECUNDARIOFISICA IMPRIMIR MATERIAL ACADEMICO NIVEL SECUNDARIO
FISICA IMPRIMIR MATERIAL ACADEMICO NIVEL SECUNDARIO
DarwinNestorArapaQui
 
EXPERIENCIA PROYECTOS STARTUP JAVIER LASA
EXPERIENCIA PROYECTOS STARTUP JAVIER LASAEXPERIENCIA PROYECTOS STARTUP JAVIER LASA
EXPERIENCIA PROYECTOS STARTUP JAVIER LASA
Javier Lasa
 
Sistemas-de-Numeración-para-Primero-de-Secundaria.doc
Sistemas-de-Numeración-para-Primero-de-Secundaria.docSistemas-de-Numeración-para-Primero-de-Secundaria.doc
Sistemas-de-Numeración-para-Primero-de-Secundaria.doc
LuisEnriqueCarboneDe
 

Último (17)

blog.pdf de coceptos de personalidad....
blog.pdf de coceptos de personalidad....blog.pdf de coceptos de personalidad....
blog.pdf de coceptos de personalidad....
 
derecho penal busqueda de pruebas en el derecho penal peruano latinoamericano
derecho penal busqueda de pruebas en el derecho penal peruano latinoamericanoderecho penal busqueda de pruebas en el derecho penal peruano latinoamericano
derecho penal busqueda de pruebas en el derecho penal peruano latinoamericano
 
Presentación Arduino, proyecto colectivo
Presentación Arduino, proyecto colectivoPresentación Arduino, proyecto colectivo
Presentación Arduino, proyecto colectivo
 
Diapositiva Herramientas Web, Tema Web 3.0.pptx
Diapositiva Herramientas Web, Tema Web 3.0.pptxDiapositiva Herramientas Web, Tema Web 3.0.pptx
Diapositiva Herramientas Web, Tema Web 3.0.pptx
 
10. Táctica y Estrategia en Fútbol autor Oscar Milton Rivas (1).pdf
10. Táctica y Estrategia en Fútbol autor Oscar Milton Rivas (1).pdf10. Táctica y Estrategia en Fútbol autor Oscar Milton Rivas (1).pdf
10. Táctica y Estrategia en Fútbol autor Oscar Milton Rivas (1).pdf
 
Estructuras b-sicas_ conceptos b-sicos de programaci-n.pdf
Estructuras b-sicas_  conceptos b-sicos de programaci-n.pdfEstructuras b-sicas_  conceptos b-sicos de programaci-n.pdf
Estructuras b-sicas_ conceptos b-sicos de programaci-n.pdf
 
SEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
SEGURIDAD INFORMATICA- Ariana Vicente CruzattSEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
SEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
 
Biografía Eugenio Díaz Castro su vida y su libros
Biografía Eugenio  Díaz Castro su vida y su librosBiografía Eugenio  Díaz Castro su vida y su libros
Biografía Eugenio Díaz Castro su vida y su libros
 
Clases de Informática primaria para niños de colegios católicos
Clases de Informática primaria para niños de colegios católicosClases de Informática primaria para niños de colegios católicos
Clases de Informática primaria para niños de colegios católicos
 
Los derechos de autor y Ética Profesional
Los derechos de autor y Ética ProfesionalLos derechos de autor y Ética Profesional
Los derechos de autor y Ética Profesional
 
5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx
5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx
5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx
 
ayuda en egresos exposición aps 1 grupal
ayuda en egresos exposición aps 1 grupalayuda en egresos exposición aps 1 grupal
ayuda en egresos exposición aps 1 grupal
 
EduLearnIAappde IAparatodosdisponible.pptx
EduLearnIAappde IAparatodosdisponible.pptxEduLearnIAappde IAparatodosdisponible.pptx
EduLearnIAappde IAparatodosdisponible.pptx
 
WordPress training basics - básicos de cómo enseñar WordPress
WordPress training basics - básicos de cómo enseñar WordPressWordPress training basics - básicos de cómo enseñar WordPress
WordPress training basics - básicos de cómo enseñar WordPress
 
FISICA IMPRIMIR MATERIAL ACADEMICO NIVEL SECUNDARIO
FISICA IMPRIMIR MATERIAL ACADEMICO NIVEL SECUNDARIOFISICA IMPRIMIR MATERIAL ACADEMICO NIVEL SECUNDARIO
FISICA IMPRIMIR MATERIAL ACADEMICO NIVEL SECUNDARIO
 
EXPERIENCIA PROYECTOS STARTUP JAVIER LASA
EXPERIENCIA PROYECTOS STARTUP JAVIER LASAEXPERIENCIA PROYECTOS STARTUP JAVIER LASA
EXPERIENCIA PROYECTOS STARTUP JAVIER LASA
 
Sistemas-de-Numeración-para-Primero-de-Secundaria.doc
Sistemas-de-Numeración-para-Primero-de-Secundaria.docSistemas-de-Numeración-para-Primero-de-Secundaria.doc
Sistemas-de-Numeración-para-Primero-de-Secundaria.doc
 

Sacale partido al personalizador

  • 2. ¿QUÉ ES? Es un framework para previsualizar configuraciones en nuestro sitio (v 3.4)
  • 3. ¿PARA QUÉ SE UTILIZA? En el personalizador encontramos por defecto opciones de configuración como: - Identidad del sitio (título, descripción, logo…) - Gestión de Menús - Gestión de Widgets - Portada Muchos temas y plugins utilizan el personalizador para ofrecer al usuario opciones de configuración propias: - Colores y estilos - API keys - Layouts - Claims
  • 4. ¿DE QUÉ CONSTA? 4 Objetos: Panels, Sections, Controls y Settings
  • 5. PANELS Los Panels son elementos contenedores de Sections. Un nivel adicional de jerarquía
  • 6. SECTIONS Las Sections son contenedores (UI) para Controls
  • 7. CONTROLS Son elementos (UI) para establecer datos. Inputs de diferentes tipos
  • 8. SETTINGS Es la asociación del Control con el dato que se almacena en BBDD.
  • 9. UN POCO DE CÓDIGO… Necesitamos crear una función en el archivo functions.php de nuestro tema o en nuestro plugin, y añadirla al hook ‘customize_register’ function themeslug_customize_register( $wp_customize ) { // Do stuff with $wp_customize, the WP_Customize_Manager object. } add_action( 'customize_register', 'themeslug_customize_register' ); Importante: Es recomendable el uso de prefijos para cualquier ID de los objetos que vamos a crear a continuación para evitar conflictos
  • 10. MÉTODOS Para cada objeto: add_, get_ y remove_ $wp_customize->add_panel(); $wp_customize->get_panel(); $wp_customize->remove_panel(); $wp_customize->add_section(); $wp_customize->get_section(); $wp_customize->remove_section(); $wp_customize->add_setting(); $wp_customize->get_setting(); $wp_customize->remove_setting(); $wp_customize->add_control(); $wp_customize->get_control(); $wp_customize->remove_control();
  • 11. PRIORIDAD Podremos establecer el orden de nuestros elementos teniendo en cuenta que por defecto:
  • 12. THEME_MODS VS OPTIONS ¿Opciones del tema u Opciones generales?
  • 13. AÑADIENDO UN PANEL Usando el método add_panel $wp_customize->add_panel( 'panel_id', array( 'priority' => 160, 'capability' => 'edit_theme_options', 'theme_supports' => '', // Rarely needed 'title' => __( 'Título Panel', 'your_textdomain' ), 'description' => __( 'Descripción Panel', 'your_textdomain' ), ) );
  • 14. AÑADIENDO UN SECTION Usando el método add_section $wp_customize->add_section( 'section_id', array( 'panel' => 'panel_id', // Not typically needed. 'priority' => 160, 'capability' => 'edit_theme_options', 'theme_supports' => '', // Rarely needed. 'title' => __( 'Título Section', 'your_textdomain' ), 'description' => __( 'Descripción Section', 'your_textdomain' ), ) );
  • 15. AÑADIENDO UN SETTING Usando el método add_setting. Estableceremos el nombre y el tipo de dato que guardaremos en BBDD. Podremos establecer un valor por defecto y además validar y sanitizar el dato antes de guardarlo $wp_customize->add_setting( 'setting_id', array( 'type' => 'theme_mod', // or 'option' 'capability' => 'edit_theme_options', 'theme_supports' => '', // Rarely needed. 'default' => '', // Ej: #000000 'transport' => 'refresh', // or postMessage 'sanitize_callback' => '', // Ej: ‘sanitize_hex_color’ 'sanitize_js_callback' => '', // Basically to_json. ) );
  • 16. AÑADIENDO UN CONTROL Usando el método add_control. Al añadir el control lo asociamos al Setting. También indicamos a que Section pertenece, así como el tipo, título, descripción, etc… $wp_customize->add_control( 'setting_id', array( 'type' => 'date', 'priority' => 10, // Within the section. 'section' => 'section_id', // Required, core or custom. 'label' => __( 'Fecha', 'your_textdomain' ), 'description' => __( 'Descripción', 'your_textdomain' ), 'input_attrs' => array( 'class' => 'my-custom-class-for-js', 'style' => 'border: 1px solid #900', 'placeholder' => __( 'dd/mm/yyyy', 'your_textdomain' ), ), 'active_callback' => 'is_front_page', ) );
  • 17. TIPOS DE CONTROLS Podemos usar los siguientes tipos de controles: • HTML inputs: text, hidden, number, range, url, tel, email, search, time, date, datetime, y week (Dependiendo de la compatibilidad del navegador) • checkbox • textarea • radio (las opciones las pasaremos por el parámetro choices) • select (las opciones las pasaremos por el parámetro choices) • dropdown-pages • controles personalizados
  • 18. TIPOS DE CONTROLS: EJEMPLOS $wp_customize->add_control( 'setting_id', array( 'type' => 'range', 'section' => 'section_id', 'label' => __( 'Etiqueta', 'your_textdomain' ), 'input_attrs' => array( 'min' => 0, 'max' => 10, 'step' => 2, ), ) ); $wp_customize->add_control( 'setting_id', array( 'type' => 'radio', 'section' => 'section_id', 'label' => __( 'Etiqueta', 'your_textdomain' ), 'choices' => array( 'on' => __( 'On', 'your_textdomain' ), 'off' => __( 'Off', 'your_textdomain' ), ), ) ); $categories = get_categories(); $cats = array(); foreach($categories as $category) { $cats[$category->slug] = $category->name; } $wp_customize->add_control( 'setting_id', array( 'type' => 'select', 'section' => 'section_id', 'label' => __( 'Etiqueta', 'your_textdomain' ), 'choices' => $cats ) ); $wp_customize->add_control( 'setting_id', array( 'type' => ‘dropdown-pages', 'section' => 'section_id', 'label' => __( 'Etiqueta', 'your_textdomain' ), ) );
  • 19. WP_CUSTOMIZE_COLOR_CONTROL $wp_customize->add_control( new WP_Customize_Color_Control ( $wp_customize, 'setting_id', array( 'label' => __( 'Etiqueta', 'your_textdomain' ), 'section' => 'section_id', // Required, core or custom. ) );
  • 20. WP_CUSTOMIZE_MEDIA_CONTROL $wp_customize->add_control( new WP_Customize_Media_Control ( $wp_customize, 'setting_id', array( 'mime_type' => 'image', // image, audio, video, application 'label' => __( 'Etiqueta', 'your_textdomain' ), 'section' => 'section_id', // Required, core or custom. ) );
  • 21. EXTENDIENDO OBJETOS Podemos crear Panels, Sections, Controls y Settings personalizados extendiendo las clases asociadas con cada objeto: WP_Customize_Panel, WP_Customize_Section, WP_Customize_Control y WP_Customize_Setting: class WP_New_Menu_Customize_Control extends WP_Customize_Control { public $type = 'new_menu'; public function render_content() {?> <button class="button button-primary" id="create-new-menu-submit" tabindex="0"><?php _e( 'Create Menu', 'your_textdomain' ); ?></button>; <?php } }
  • 22. VALIDACIONES El personalizador nos permite validar y sanitizar nuestras opciones antes de guardar en base de datos $wp_customize->add_setting( 'setting_id', array( 'sanitize_callback' => 'absint', 'validate_callback' => 'validate_established_year' ) ); function validate_established_year( $validity, $value ) { $value = intval( $value ); if ( empty( $value ) || ! is_numeric( $value ) ) { $validity->add( 'required', __( 'Año no válido', 'your_textdomain' ) ); } elseif ( $value < 1900 ) { $validity->add( 'year_too_small', __( 'Menor de 1900', 'your_textdomain' ) ); } elseif ( $value > gmdate( 'Y' ) ) { $validity->add( 'year_too_big', __( 'Mayor que actual', 'your_textdomain' ) ); } return $validity; }
  • 23. MULTI-IDIOMA Tanto WPML como Polylang disponen de la función icl_get_languages para obtener los idiomas activos de un sitio Array ( [es] => Array ( [id] => 2 [active] => 1 [native_name] => Español [missing] => 1 [translated_name] => [language_code] => es [country_flag_url] => http://wcs16.com/wp-content/plugins/polylang/flags/es.png [url] => http://wcsantander16.com/es/ ) )
  • 24. MULTI-IDIOMA function themeslug_customize_register( $wp_customize ) { $langs = (function_exists('icl_get_languages')) ? icl_get_languages('skip_missing=N') : array( 'es' => array( 'language_code' => ‘es’)); $wp_customize->add_section( 'section_id', array( 'title' => __( 'Título Section', 'your_textdomain' ), 'description' => __( 'Descripción Section', 'your_textdomain' ), ) ); foreach($langs as $lang) { $wp_customize->add_setting( 'setting_id_' . $lang['language_code'], array( 'type' => 'theme_mod', 'capability' => 'edit_theme_options', ) ); $wp_customize->add_control( 'setting_id_' . $lang['language_code'], array( 'type' => 'text', 'section' => 'section_id', 'label' => __( 'Título', 'your_textdomain' ) . " " . $lang['native_name'], ) ); } } add_action( 'customize_register', 'themeslug_customize_register' );
  • 26. ¡ESTO ES TODO AMIG@S! Pablo López Mestre @desarrollowp desarrollowp.com WP Manager en VASS digital ¡Gracias por vuestra asistencia!