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: