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:
<?php
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”:
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:
<?php
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.