Añadir etiquetas multi idioma en WordPress con qTranslate mediante código

alojamiento wordpress

Hola de nuevo,

Cuando editamos un post y añadimos una etiqueta solo lo podemos hacer en un idioma, sin embargo qTranslate nos permite luego editar la etiqueta y añadir la traducción en los idiomas que estén activos.

¿Pero que sucede si estamos programando nuestro propio plugin y queremos añadir dinámicamente mediante código etiquetas a un post?

La función  wp_set_post_tags( ) nos resuelve la mitad del problema.

Ejemplo:

wp_set_post_tags( 35, 'perros,gatos', true );

Esta función nos permite añadir etiquetas a un post, su uso es sencillo:

El primer parámetro es el id del post al que queremos añadir las etiquetas.

El segundo parámetro son el grupo de etiquetas que queremos asignarle, puede se un string con las etiquetas separadas por comas o un array con las etiquetas.

El tercer parámetro es opcional y es un booleano que si esta a true añade las etiquetas a las etiquetas existentes y si está a false sustituye las etiquetas existentes por las nuevas. Este parámetro puede ser un array con las diferentes etiquetas o un String con las etiquetas separadas por comas.

Podéis consultar mas información sobre esta función de wordpress aquí.

El problema es que esta función solo nos permite crear etiquetas en un idioma.

Después de buscar y buscar hasta dejar el cajetín de búsqueda de google con agujetas no he encontrado nada que me sirviese, a si que he decidido crearme mi  propia función para  resolver el problema basándome en el core del plugin qTranslate.

public static function updateTerm($arrTerm)
{
    global $q_config;

    if(isset($arrTerm[$q_config['default_language']]) &&       $arrTerm[$q_config['default_language']]!='') 
    {
        $default = htmlspecialchars(qtrans_stripSlashesIfNecessary($arrTerm[$q_config['default_language']]), ENT_NOQUOTES);
        if(!isset($q_config['term_name'][$default]) || !is_array($q_config['term_name'][$default])) $q_config['term_name'][$default] = array();

    foreach($q_config['enabled_languages'] as $lang) 
    {
        $arrTerm[$lang] = qtrans_stripSlashesIfNecessary($arrTerm[$lang]);
        if($arrTerm[$lang]!='') 
        {
             $q_config['term_name'][$default][$lang] = htmlspecialchars($arrTerm[$lang], ENT_NOQUOTES);
        } 
        else 
        {
             $q_config['term_name'][$default][$lang] = $default;
        }
    }
    update_option('qtranslate_term_name',$q_config['term_name']);
 } 
}

La función recibe como parámetro un array asociativo con la etiqueta en cada idioma.

Ahora por ejemplo si a un post con id=34 quisiéramos añadir las etiqueta ‘gato’ en Español y en Ingles podríamos escribir algo como lo siguiente:

// Añadimos la etiqueta gato al post con id 34

wp_set_post_tags( 34, 'gato');

// creamos un array con la etiqueta traducida en cada idioma y se lo
// pasamos a la función updateTerm()

$etiqueta = array();
$etiqueta['es'] = 'gato';
$etiqueta['en'] = 'cat';
updateTerm($etiqueta);

Solo me queda comentar que la clave del array asociativo es el código iso del idioma, y deberéis crear la traducción de la etiqueta para todos los idiomas que tengáis activos.

Espero que os sirva de ayuda.

Salud!!!

P.D: Podéis probar mis últimos juegos para móviles. Si ponéis una valoración en alguno me hacéis un favor 😉

ico_beheading_androidico_beheading_iosico_beheading_wpGalactic InsectsGalactic InsectsGalactic InsectsSnow SoccerSnow Soccer

alojamiento wordpress

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s