¿La mejor práctica para hacer que los términos de taxonomía sean traducibles sin cambiar las babosas?

4

Tengo una taxonomía personalizada con países y estados. Me gustaría hacer que estos términos sean traducibles, pero no estoy seguro de cuál sería la mejor manera de lograrlo. En primer lugar, no quiero que las babosas cambien, solo la etiqueta, y quizás las cadenas de descripción.

Pensé en dos maneras. Uno podría estar usando WPML. Pero WPML parece forzarte a cambiar la bala para cada idioma y eso es lo que no quiero. Otro podría ser wp_insert_term() pero no estoy seguro de si eso es eficiente o la forma correcta de hacerlo. Encontraría más práctico permitir que los administradores / editores agreguen sus propios términos, la codificación de todos los términos no me permitiría hacer eso y, además, tengo la sensación de que no es muy eficiente (podría haber algunos cientos de ubicaciones en mi taxonomía) ...

¿Alguna pista?

ACTUALIZACIÓN 1: WPML

Me puse en contacto con el soporte de WPML, explicaron que WPML crea nuevos términos de taxonomía para cada idioma y, como tal, cada término debe tener una única bala ... sin embargo, me pregunto si hay alguna otra opción para lograrlo, por ejemplo. con alias de términos, por ejemplo,

ACTUALIZACIÓN 2: wp_insert_term ()

Encontré esto: enlace y sugiere ejecutar wp_insert_term() dentro de un gancho de 'after_theme_setup' o after_switch_theme action. Sin embargo eso no solucionará el problema de traducción. Dado que la acción de enganche se dispara solo después de la configuración del tema, incluso si obtengo un texto con todas las cadenas de etiquetas de términos, solo considerará el idioma en el momento de la configuración del tema.

    
pregunta unfulvio 24.02.2014 - 13:15

3 respuestas

4

Realmente no estoy actualizado sobre WPML y cómo maneja las traducciones, pero mi entendimiento general es que en la mayoría de los casos simplemente crea entradas duplicadas para cada idioma y las vincula con el "original".

Sin embargo, recientemente tuve un problema similar en el que necesitaba la capacidad de agregar una versión "pluralizada" del término nombres (en oposición al campo predeterminado donde escribo el nombre en singular). Resolví esto conectando <taxonomy>_add_form_fields , <taxonomy>_edit_form_fields , edited_<taxonomy> y create_<taxonomy> .

Solución # 1 - agregar campo de taxonomía personalizada

define('TERM_PLURAL_NAME_KEY', 'term_name_plural');

function setup_taxonomies() {
    $taxonomy_name = 'my_tax';

    add_action( $taxonomy_name . '_add_form_fields', 'my_tax_add_plural_name_field', 10, 2 );
    add_action( $taxonomy_name . '_edit_form_fields', 'my_tax_edit_plural_name_field', 10, 2 );

    add_action( 'edited_' . $taxonomy_name, 'save_my_tax_meta', 10, 2 );
    add_action( 'create_' . $taxonomy_name, 'save_my_tax_meta', 10, 2 );
}
add_action('init', 'setup_plural_taxonomies')


function my_tax_add_plural_name_field() {
    ?>
        <div class="form-field">
            <label for="term_meta[<?php echo TERM_PLURAL_NAME_KEY; ?>]"><?php _e( 'Plural name', 'i18n_key' ); ?></label>
            <input type="text" name="term_meta[<?php echo TERM_PLURAL_NAME_KEY; ?>]" id="term_meta[<?php echo TERM_PLURAL_NAME_KEY; ?>]" value="">
            <p class="description"><?php _e( 'A pluralized version of the term title, to be used when multiple objects are referred to.', 'i18n_key' ); ?></p>
        </div>
    <?php
}

function my_tax_edit_plural_name_field($term) {
        $t_id = $term->term_id;
        $term_meta = get_option( "taxonomy_$t_id" ); ?>
        <tr class="form-field">
        <th scope="row" valign="top"><label for="term_meta[<?php echo TERM_PLURAL_NAME_KEY; ?>]"><?php _e( 'Plural name', 'i18n_key' ); ?></label></th>
            <td>
                <input type="text" name="term_meta[<?php echo TERM_PLURAL_NAME_KEY; ?>]" id="term_meta[<?php echo TERM_PLURAL_NAME_KEY; ?>]" value="<?php echo esc_attr( $term_meta[TERM_PLURAL_NAME_KEY] ) ? esc_attr( $term_meta[TERM_PLURAL_NAME_KEY] ) : ''; ?>">
                <p class="description"><?php _e( 'A pluralized version of the term title, to be used when multiple objects are referred to.', 'i18n_key' ); ?></p>
            </td>
        </tr>
    <?php
}

function save_my_tax_meta($term_id) {
    if ( isset( $_POST['term_meta'] ) ) {
        $t_id = $term_id;
        $term_meta = get_option( "taxonomy_$t_id" );
        $cat_keys = array_keys( $_POST['term_meta'] );
        foreach ( $cat_keys as $key ) {
            if ( isset ( $_POST['term_meta'][$key] ) ) {
                $term_meta[$key] = $_POST['term_meta'][$key];
            }
        }
        update_option( "taxonomy_$t_id", $term_meta );
    }
}

El código anterior podría modificarse fácilmente para mantener una cadena localizada en lugar del nombre en plural. Luego puede recorrer la lista de idiomas activados en WPML y un campo para cada idioma (deberá ajustar todas las funciones anteriores). Sin embargo, esto puede ser poco práctico si tiene muchos lenguajes habilitados en WPML y muy bien puede saturar el editor.

Por eso también puedo imaginar una implementación alternativa ...

Solución # 2: conecta los términos "localizados" con el término "idioma predeterminado"

No estoy seguro de si WPML haría esto automáticamente por usted, pero en caso de que no lo haga, podría permitirle crear términos localizados para cada idioma y escribir una función que, dado un término, devuelva la instancia de idioma localizada del término. . Luego, puede crear esta relación utilizando los mismos ganchos que en el ejemplo anterior, pero en su lugar, agregando dos campos: el primero contiene la versión de idioma predeterminada del término (usando wp_dropdown_categories ) y el otro es el idioma del término localizado.

Como dije, tengo poca experiencia con WPML y uno podría imaginar que este tipo de funcionalidad ya está implementado en el propio complemento, por lo que sugeriría investigar eso antes de seguir este camino.

    
respondido por el Simon 07.03.2014 - 12:02
0

Siempre puede agregar campos personalizados a los términos, cada campo personalizado representará una traducción, he encontrado un buen tutorial sobre este tema, muestra cómo agregar un campo personalizado a la página de edición de taxonomía.

    
respondido por el Alex Sancho 08.03.2014 - 09:01
0

No estoy seguro de cómo planea lidiar con estos términos, pero creo que aún puede usar la forma nativa de WPML para manejar las traducciones de los términos, aunque no pueda mantener la misma babosa.

Cuando necesitas lidiar con un término slug, puedes confiar en la función icl_object_id ().

Por ejemplo, suponga que tiene el inglés como idioma predeterminado y el italiano como segundo idioma. Se define un término "Roma", con la babosa "Roma". Al traducirlo a "Roma", la bala se convertirá en "roma" o "roma-2" si intentas usar la misma bala.

Cuando necesite trabajar con el término actual, puede usar algo así:

global $sitepress;

$taxonomy_name = 'cities';
$current_term_slug = 'roma'; //so, that's Italian, for instance;

$current_term = get_term_by( 'slug', $current_term_slug, $taxonomy_name );

//Term exists
if($current_term) {
    $default_language = $sitepress->get_default_language();
    $current_language = $sitepress->get_current_language();

    $term_id = $current_term->term_id;
    if ( $default_language != $current_language ) {
        //Here you get the default language term id
        $term_id = icl_object_id( $term_id, $taxonomy_name, false, $default_language );
    }
}

Eso es solo un ejemplo, pero creo que es lo suficientemente claro como para mostrarle cómo convertir siempre la bala de un término taxonómico dado, al definido en el idioma predeterminado.

    
respondido por el Andrea Sciamanna 16.04.2014 - 17:23

Lea otras preguntas en las etiquetas