Archivo de la etiqueta: etiquetas

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

 

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.

¿Necesitas un presupuesto para un desarrollo WordPress a medida?

¿Quieres un plugin a medida que realice una funcionalidad concreta que necesitas para tu WordPress?

Solicita un presupuesto sin compromiso: