SlideShare una empresa de Scribd logo
1 de 26
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_ cuencapaulcuenca9
 
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 WordPressAsier Marqués
 
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
 
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 PHPJavier 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 @WPBilbaoDarío BF
 
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.
 
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 jQueryJavier P.
 
Tips Bootstrap 3 en Drupal 7
Tips Bootstrap 3 en Drupal 7Tips Bootstrap 3 en Drupal 7
Tips Bootstrap 3 en Drupal 7SuperSoft
 
Presentacion sobre cassandra
Presentacion sobre cassandraPresentacion sobre cassandra
Presentacion sobre cassandrajesusnoseq
 
M. carrito d compra en phpfinal
M. carrito d compra en phpfinalM. carrito d compra en phpfinal
M. carrito d compra en phpfinalAbyliel 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
 
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

Las redes sociales en el mercado digital
Las redes sociales en el mercado digitalLas redes sociales en el mercado digital
Las redes sociales en el mercado digitalNayaniJulietaRamosRa
 
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señorkkte210207
 
Unidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disolucionesUnidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disolucioneschorantina325
 
Guia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdfGuia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdflauradbernals
 
TIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdf
TIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdfTIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdf
TIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdfLUZMARIAAYALALOPEZ
 
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjjPPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjjNachisRamos
 
12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdfedwinmelgarschlink2
 

Último (7)

Las redes sociales en el mercado digital
Las redes sociales en el mercado digitalLas redes sociales en el mercado digital
Las redes sociales en el mercado digital
 
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
 
Unidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disolucionesUnidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disoluciones
 
Guia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdfGuia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdf
 
TIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdf
TIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdfTIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdf
TIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdf
 
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjjPPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
 
12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf
 

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!