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.