Archivo de la etiqueta: qtranslate

Como solucionar problema de incompatibilidad de versión de WordPress y qTranslate

 

Hola todos:

qTranslate es un maravilloso plugin que nos permite tener nuestro sitio creado con WordPress en varios idiomas.

Sin embargo ya me ha pasado que varias veces que cuando actualizo a una nueva versión de WordPress qTranslate se desactiva mostrando este mensaje:

The qTranslate Editor has disabled itself because it hasn’t been tested with your WordPress version yet. This is done to prevent WordPress from malfunctioning. You can reenable it by clicking here (may cause data loss! Use at own risk!). To remove this message permanently, please update qTranslate to the corresponding version.

Reconozco que la primera vez que me paso me asusté y tome la drástica decisión de volver a la versión anterior de wordpress, aquí explico como volver a una versión anterior de wordpress.

Curioseando en el código de qTranslate me di cuenta que que la solución es mucho más sencilla.

Para poder utilizar la versión más reciente de WordPress con el plugin qTranslate antes de que este se actualice solo tenemos en entras en la carpeta plugins que se encuentra dentro de wp-content, localizar la carpeta qtranslate y dentro de esta editar el archivo qtranslate.php.

Tenemos que localizar la linea donde pone:

define('QT_SUPPORTED_WP_VERSION', 'x.x.x');

Donde ‘x.x.x’ será la versión de WordPress que soporta qTranslate, debéis poner la versión actual de WordPress que tenéis instalada.

Y con este pequeño cambio ya podemos seguir usando qTranslate hasta que se actualice para la versión actual de wordpress.

Hay que tener en cuenta la advertencia que aparece en el en el comentario que se encuentra justo encima :

 // qTranslate Editor will only activated for the given version of WordPress.
// Can be changed to use with other versions but might cause problems and/or data loss!

Que viene a decir que puedes cambiar a otra versión pero que podría causar problemas o perdida de datos,en principio los cambios de una versión a otra no suelen ser lo suficientemente grandes como para causar problemas, intenta actualizar qTranslate en cuanto salga la siguiente versión.

Eso es todo por hoy.

 

¿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:

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:

Como volver a la versión anterior de WordPress cuando falla algún plugin después de actualizar.

 

Hola a todos.

Hoy no he podido resistir ta tentación de darle a actualizar wordpress cuando he visto el aviso de que había una actualización. Se que es tentador y somos débiles…. , pero hacedme caso, no lo hagáis hasta que no estéis seguros de que todos lo plugins que tenéis instalados funcionan correctamente con la nueva versión.

Nada más actualizar me ha salido el siguiente mensaje:

"The qTranslate Editor has disabled itself because it hasn't been tested with your WordPress version yet. ...."

Supongo que es cuestión de tiempo que qTranslate se actualice para ser compatible con la nueva versión de WordPress pero hasta entonces sera mejor seguir con la versión anterior.

¿Como podemos volver  a la versión anterior de WordPress?

Afortunadamente es bastante sencillo. Si eres de los precavidos que hacen backups  con frecuencia de todos los archivos de tu sitio solo tienes que coger un backup y copiar todos los archivos de nuevo, y cuando digo todos no me refiero solo a lo que tienes en wp-content si no todos los archivos de wordpress.

Si no tenemos un backup de todos los archivos de la versión anteriór debemos bajarnos la versión anterior  de wordpress: http://es.wordpress.org/releases/#older.

Una vez descargada y descomprimida la carpeta debéis  subir por ftp (o copiar si estáis trabajando en local) todos los archivos y carpetas sustituyendo a los existentes manteniendo la carpetas wp-content y wp-config y el archivo .htaccess.

Es muy importante no sobrescribir estas carpetas y el .htacces. ya que podemos perder lo que tenemos, por eso antes de hacer nada  siempre es recomendable hacer una copia de los archivos y  una copia de seguridad de la base de datos.

Una vez de sobrescribir los archivos con la versión anterior (salvo los mencionados arriba), si entramos en /wp-admin veremos que hemos vuelto a la versión anterior y todo debería funcionar como antes.

Eso es todo.

Salud!!!

¿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:

WordPress – Acceder al idioma seleccionado y los idiomas activos de qTranslate desde javascript.

Hola a todos:

Hoy toca hablar de WordPress y de ese maravilloso plugin que nos permite utilizar varios idiomas en los sitios creados con WordPress llamado qTranslate.

A veces podemos necesitar saber cual es el idioma que está seleccionado para realizar una acción determinada en función a esté.

Para obtener el código iso del idioma actual escribimos esto:

<?php
    $global $q_config;
    $iso = qtrans_getLanguage();

    echo 'El idioma actual es: '.$iso;
?>

Por ejemplo si el idioma actual es el español  obtendríamos esto:

El idioma actual es:  es

Si queremos obtener el nombre del idioma en lugar de su iso escribimos esto:

<?php
    $global $q_config;
    $iso = qtrans_getLanguage(); // obtenemos el código iso.
    $idioma =  qtrans_getLanguageName($iso); // Obtenemos el idioma.
    echo 'El idioma actual es: '.$idioma;
?>

Y obtendríamos como resultado algo como esto:

El idioma actual es: Español

Y si queremos saber todos los idiomas activos podemos obtenerlos de esta manera:

<?php

global $q_config;
$activos = $q_config['enabled_languages'];
foreach ($activos as $l)
{
    echo  qtrans_getLanguageName($l).'<br />';
}

?>

Hasta aquí puede que le haya servido de ayuda a alguien pero en el titulo del post ponía ‘desde javascript’, no se me ha olvidado :-).

Puede que escribiendo tu propio plugin, o modificando el tema para darle alguna funcionalidad extra necesites acceder a las variables anteriores pero desde javascript (a mi me ha pasado por eso os cuento todo esto).

Podríamos crear variables globales escritas con php tipo algo así:

<?php  echo  "Idioma =".qtrans_getLanguage()."" ?>

Pero es un método  feo, poco elegante y una mala práctica.

Bien, imaginemos que estamos escribiendo un plugin, lo primero que tendríamos que hacer es añadir el archivo .js donde estarán nuestras funciones javascript.

para ello utilizamos la función de wordpress wp_enqueue_script.

wp_enqueue_script( 'mi_script',plugins_url( '/js/mi_script.js', __FILE__ ));

El primer parámetro es el nombre que le damos para identificar al script,  puede ser el que queramos.

El segundo parámetro es la url donde se encuentra el archivo, en esta ocasión se encuentra en la carpeta de nuestro plugin en una subcarpeta llamada js.

Para obtener la ruta de nuestro plugin utilizamos la función plugins_url();

Y ahora llega el momento mágico, para hacer que las variables php sean accesibles desde nuestro javascript escribimos lo siguiente:

// Obtenemos los idiomas y los pasamos a una variable javascript
global $q_config;
$arrLang = array();
$languages_iso = $q_config['enabled_languages'];
foreach ($languages_iso as $l)
{
  $arrLang[$l] = qtrans_getLanguageName($l);
}

wp_localize_script( 'mi_script', 'lang',array('languages' => $arrLang, 'iso' => qtrans_getLanguage()));

La función  wp_localize_script nos permitirá  acceder desde nuestro javascript a las variables que le pasemos siempre que antes hayamos definido nuestro script con wp_enqueue_script.

El primer parametro de wp_localize_script() debe ser el nombre que le hayamos dado a nuestro script al añadirlo con wp_enqueue_script.

El segundo parámetro es el nombre del objeto desde el cual accederemos desde javascript a los datos, y el tercero es un array que contiene las variables que despues utilizaremos desde javascript.

Ya solo nos queda la parte javascript.

En nuestro archivo mi_script.js cremos por ejemplo pla siguiente función:

function dime_el_idioma(){
    alert(lang.languages[lang.iso]);
}

Llamamos a esta función desde el html por ejemplo con un botón:

<input type="button" onclick="dime_el_idioma()" value="Idioma" />

Si probamos todo esto veremos que al pulsar el botón nos mostrará un alert con el nombre del idioma activo que ahora lo tenemos accesible desde javascript.

Y… eso es todo…

Espero que a alguien le 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: