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:

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

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:

<?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.

¿Te ha resultado útil esta información? 🍺

Si este post te ha resuelto un problema, invítame a un café o a una cerveza. Con este pequeño gesto me animas a seguir escribiendo.

Comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *:

  • El fin del tratamiento es únicamente la moderación de comentarios para evitar spam
  • La legitimación es tu consentimiento al comentar
  • No se comunicará ningún dato a terceros salvo por obligación legal
  • Tienes derecho al acceso, rectificación y eliminación de los comentarios