Blog sobre desarrollo WordPress en Español Desarrollo WordPress en Español
personalizador

Cómo añadir nuestras propias opciones multi-idioma en el personalizador de WordPress

En la entrada anterior veíamos cómo agregar nuestras propias opciones en el personalizador de WordPress. En ésta entrada vamos a ver cómo podríamos organizarlas por idioma en el caso de que estemos desarrollando un tema o plugin multi-idioma.

Vamos a ver con un ejemplo muy básico cómo agregar al personalizador de WordPress una opción para configurar un claim multi-idioma que aparezca en la cabecera de nuestro sitio. El ejemplo lo voy a hacer sobre dos supuestos: que estemos utilizando para el multi-idioma el plugin WPML, ó  que estemos utilizando para el multi-idioma el plugin Polylang.

La idea es crear un Panel llamado “Claim”, y dentro del Panel agrupar dinámicamente en Sections todos los idiomas que tengamos dados de alta en nuestro sitio.

 

Crear opciones multi-idioma en el personalizador de WordPress si utilizas WPML

Si estamos utilizando WPML nos valdremos de la función icl_get_languages() para obtener los idiomas que hemos dado de alta en el sitio. La función devuelve una colección de entradas por idioma. Por ejemplo, para un sitio WordPress que utiliza español e inglés, devolverá:

Array ( [es] => Array ( [id] => 2 [active] => 1 [encode_url] => 0 [default_locale] => es_ES [tag] => es-ES [native_name] => Español [language_code] => es [translated_name] => Español [url] => http://tudominio.com/ [country_flag_url] => http://tudominio.com/wp-content/plugins/sitepress-multilingual-cms/res/flags/es.png ) [en] => Array ( [id] => 1 [active] => 0 [encode_url] => 0 [default_locale] => en_US [tag] => en-US [native_name] => English [language_code] => en [translated_name] => Inglés [url] => http://tudominio.com/en/ [country_flag_url] => http://tudominio.com/wp-content/plugins/sitepress-multilingual-cms/res/flags/en.png ) )

Crearemos un Panel y a continuación recorreremos el array de idiomas dando de alta una Section para cada idioma. Del mismo modo crearemos el Setting y el Control correspondiente a nuestro claim. Como la idea es hacerlo dinámico, los IDs tanto de las Section, Settings y Controls serán creados con un guión bajo y el código de idioma correspondiente, es decir, “_es” y “_en” para nuestro caso:

function my_customize_register ( $wp_customize ) { $langs = icl_get_languages('skip_missing=N'); if (empty($langs)) { $langs = array( "es" => array( "active" => 1, "language_code" => "es", "translated_name" => "Español" ));} $wp_customize->add_panel( 'claim_panel', array( 'title' => __( 'Claims', 'textdomain' ), 'description' => '', 'priority' => 160, )); foreach ($langs as $key => $lang) { $wp_customize->add_section( 'claim_section_' . $lang["language_code"] , array( 'title' => __( 'Texto Claim', 'textdomain' ) . " " . strtoupper($lang["language_code"]), 'description' => '', 'panel' => 'claim_panel', )); $wp_customize->add_setting( 'opt_claim_' . $lang["language_code"], array( 'type' => 'option', 'capability' => 'edit_theme_options', ) ); $wp_customize->add_control('opt_claim_' . $lang["language_code"], array( 'label' => __( 'Mensaje', 'textdomain' ) . " " . $lang["language_code"], 'section' => 'claim_section_' . $lang["language_code"], 'type' => 'textarea', )); } } add_action( 'customize_register', 'my_customize_register' );

Accediendo ahora al back-end de WordPress, y haciendo click en Apariencia => Personalizar podremos ver en el personalizador nuestro Panel “Claim”:

personalizador multi-idioma

 

Una vez introducidos nuestros valores, para mostrarlos en el front lo haremos de este modo:

<?php echo get_option('opt_claim_'.ICL_LANGUAGE_CODE);?>

ICL_LANGUAGE_CODE es donde almacena WPML el código del lenguage que hay actualmente establecido en nuestro sitio.

 

Crear opciones multi-idioma en el personalizador de WordPress si utilizas Polylang

La mecánica es la misma que en el ejemplo anterior. En este caso usaremos la función pll_languages_list() para recuperar el listado de idiomas dados de alta en nuestro sitio, que nos devuelve un array simple:

Array ( [0] => es [1] => en )

Por lo tanto, el código que deberemos añadir a nuestro functions.php o a nuestro plugin quedaría del siguiente modo:

function my_customize_register( $wp_customize ) { $langs = pll_languages_list(); if (empty($langs)) { $langs = array("es");} $wp_customize->add_panel( 'claim_panel', array( 'title' => __( 'Claims', 'textdomain' ), 'description' => '', 'priority' => 160, )); foreach ($langs as $key => $lang) { $wp_customize->add_section( 'claim_section_' . $lang , array( 'title' => __( 'Texto Claim', 'textdomain' ) . " " . strtoupper($lang), 'description' => '', 'panel' => 'claim_panel', )); $wp_customize->add_setting( 'opt_claim_' . $lang, array( 'type' => 'option', 'capability' => 'edit_theme_options', ) ); $wp_customize->add_control('opt_claim_' . $lang, array( 'label' => __( 'Mensaje', 'textdomain' ) . " " . $lang, 'section' => 'claim_section_' . $lang, 'type' => 'textarea', )); } } add_action( 'customize_register', 'my_customize_register' );

Una vez introducidos nuestros valores, para mostrarlos en el front lo haremos de este modo:

<?php echo get_option('opt_claim_'.pll_current_language());?>

La función pll_current_language() de Polylang devuelve el código del lenguage que hay actualmente establecido en nuestro sitio.

Puede que también te interese

Seguridad WordPress: usa un Captcha para login
Seguridad WordPress: usa un Captcha para login
Otro “filtro” que podemos usar para proteger nuestro panel de administración o back-end. Instalando un plugin como WP Login reCAPTCHA, podremos insertar el reCAPTCHA de…
Cómo aumentar el límite del tamaño de archivos en la librería multimedia
Cómo aumentar el límite del tamaño de archivos en la librería multimedia
En función del hosting que hayamos contratado, en algunas ocasiones podemos encontrarnos con límites a la hora de subir archivos a la librería multimedia en…
Cómo solucionar el error interno del servidor en WordPress
Cómo solucionar el error interno del servidor en WordPress
Otro de los errores más comunes o que con más frecuencia nos podemos encontrar, es el error interno del servidor ó error 500. Se identifica claramente…
Cómo crear una puerta trasera para entrar en WordPress
Cómo crear una puerta trasera para entrar en WordPress
En esta entrada vamos a ver cómo crear una puerta trasera o backdoor en WordPress. Reitero, vamos a ver el cómo, el porqué hacerlo es…