Solucionar en Qtranslate el enlace de inicio al idioma correspondiente

Nota sobre como solucionar el problema del enlace de la Home (inicio) de destino en un idioma que no es el de defecto.

Si tenemos un menú creado en WordPress en el que un <li> es un enlace a la página de inicio puede pasar que si nos encontramos ubicados en nuestra web en un idioma que no es de defecto y lo clicamos nos direccione a la página de inicio del idioma que tenemos por defecto, es decir, si nuestro idioma por defecto es el castellano y hemos traducido nuestro sitio al catalán, en caso de que un visitante esté en la página en la versión /ca y quiera volver a la página de inicio clicando en el enlace del menú ( <a href=»http://misitio.es/ca»>Inici</a> ), automáticamente Qtranslate ubicará el enlace a la home de castellano ( http://misitio.es ).

Para solucionar lo que en principio parece un problema del pluguin deberemos añadir estas lineas de código en el archivo qtranslate_hooks.php

[php]
add_filter(‘walker_nav_menu_start_el’, ‘qtrans_in_nav_el’, 10, 4);
function qtrans_in_nav_el($item_output, $item, $depth, $args){
$attributes = ! empty( $item->attr_title ) ? ‘ title="’ . esc_attr( $item->attr_title ) .’"’ : »;
$attributes .= ! empty( $item->target ) ? ‘ target="’ . esc_attr( $item->target ) .’"’ : »;
$attributes .= ! empty( $item->xfn ) ? ‘ rel="’ . esc_attr( $item->xfn ) .’"’ : »;

// Determine integration with qTranslate Plugin
if (function_exists(‘qtrans_convertURL’)) {
$attributes .= ! empty( $item->url ) ? ‘ href="’ . qtrans_convertURL(esc_attr( $item->url )) .’"’ : »;
} else {
$attributes .= ! empty( $item->url ) ? ‘ href="’ . esc_attr( $item->url ) .’"’ : »;
}

$item_output = $args->before;
$item_output .= ‘<a’. $attributes .’>’;
$item_output .= $args->link_before . apply_filters( ‘the_title’, $item->title, $item->ID ) . $args->link_after;
$item_output .= ‘</a>’;
$item_output .= $args->after;

return $item_output;
}
[/php]

Esto funciona con WordPress 3.5.2 y Qtranslate 2.5.34

Fuente del recurso: ContenidosV

15 comentarios
  1. taxi9327
    taxi9327 Dice:

    Hola Jordi. Tengo una web WP en 3 idiomas. El logo de la cabecera no quiero que vaya a la «home» (porque es una página genérica tipo intro que dura 7 segundos y te lleva automáticamente a «quienes-somos»). Lo tengo con destino a la página concreta: http://dominio.es/quienes-somos/ pero cuando estoy en otro idioma que no es el castellano, ¿como lo hago para que al clickar en el logo me lleve a CAT> http://dominio.es/ca/quienes-somos/ o ING> http://dominio.es/en/quienes-somos/? Creo que hay que modificar el header.php…

    Responder
    • Jordi Esquerigüela
      Jordi Esquerigüela Dice:

      Hola! No soy muy especializado en programación, pero por lo que me cuentas tendrías que hacer un condicional en el header.php. Primero declaras los idiomas:

      $es = false;
      if($_POST[‘idioma’]==’es-ES’) $es = true;
      $en = false;
      if($_POST[‘idioma’]==’en-US’) $en = true;

      y después los condicionales con el enlace que te interese dependiendo en el idioma que estés visualizando la página de esta manera:

      if($es) echo «enlace en español»; else if($en) echo «enlace en inglés»; else echo «enlace en caso de que tengas más idiomas»;

      Creo que con esto te funcionará. De todas maneras ya me cuentas.

      Saludos!

      Responder
  2. Karla
    Karla Dice:

    Hola, ya he puesto este código donde lo indicas, pero nose en que parte monificar el enlace de INICIO. ¿Debo hacer algo en el menú? ¿Cómo quedaría? Por favor me ayudas?

    Responder
    • Jordi Esquerigüela
      Jordi Esquerigüela Dice:

      Hola Karla,

      Una vez el código ya esté introducido en qtranslate_hooks.php lo único que se deberá de hacer es tener un menú creado en wordpress ( Apariencias > Menús ). Una vez creado un menú para cada idioma y hayas elegido las páginas y/o categorías que quieres que aparezcan, deberás crear un enlace «Personalizado», tipo «Inicio», «Home» o como tu lo quieras llamar, pero deberás tener en cuenta que este enlace será el de la página principal de tu sitio.

      Siguiendo estos dos pasos te debería de funcionar, pero si sigues teniendo problemas ponte en contacto conmigo a través de mi email ( jordi @ jordiesqueriguela .com) y vemos que es lo que puede estar fallando.

      Saludos!

      Responder
  3. Eliseu
    Eliseu Dice:

    Hola Jordi,
    estic creant el meu web amb WP. He fet una pàgina estàtica d’inici, sense menú, tan sols un slideshow, logo i selecció d’idiomes (amb qtranslate). No sé on he de modificar l’enllaç perquè l’idioma escollit em porti a la pàgina de posts. En aquests moments, els enllaços dels idiomes apunten a la frontpage i, per tant, és un bucle. Moltes gràcies per tot i felicitats pel teu blog.

    Responder
    • Jordi Esquerigüela
      Jordi Esquerigüela Dice:

      Hola Eliseu,

      Primer de tot et vui donar les gràcies per passar-te i deixar un comentari per la web.

      Pel que puc entendre la pàgina d’inici és la url principal i a partir d’allà està tot amb WordPress, és així?

      Crec que la millor opció és que si és una pàgina estàtica l’enllaç de les bandereas portin a la URL corresponent per l’idioma (http:// tusitio.com/blog/ca per català) i que el qTranslate comenci a realitzar la seva funció un cop dins de la pàgina de post de Worpress.

      Abans hauràs de configurar WordPress perquè la pàgina sigui del tipus:http:// tusitio.com/blog (això ho pots fer al back de Wp, pestanya Ajustes > General > URL de WordPress) i a partir d’aquí començar a definir les URL s per idioma …http:// tusitio.com/blog/ca o http:// tusitio.com/blog/en

      De totes maneres i al marge de la teva pregunta, no és del tot recomanat tenir una pàgina d’inici estàtica, ja que a nivell SEO perdràs una molt bona via de visites.

      Espero haver contestat a la teva pregunta, si no és així et pots posar en contacte amb mi a través del correu.

      Salutacions i gràcies

      Responder
  4. Ramon
    Ramon Dice:

    Hola Jordi,

    El qtranslate te 3 opcions per posar les URL’s (?lang=ca),(ca/URL) o (ca.meulloc.cat)

    Com especialista i tecnic en SEO quina es la millor opció. Canviar la opció existent tornarà boig al Sr. Google per indexar de nou o enllaços trencats, etc?
    Moltes gracies i salut.

    Responder
    • Jordi Esquerigüela
      Jordi Esquerigüela Dice:

      Bon dia Ramon,

      De les tres opcions que té qTranslate , la millor per part de Google és utilitzar subdirectori /ca , /es … quedant latevaweb.es/ca/ . D’aquesta manera Google entén l’idioma de cada subdirectori des de la URL .

      Pel que fa a canviar tota l’estructura d’URL del teu lloc web et recomanaria que si ho fas sigui amb redireccions 301 de les categories més importants del teu lloc. També et recomanaria que et miris bé Google Analytics i veiessis quines pàgines/post són els que et proporcionen més visites orgàniques per crear redireccions.

      D’aquesta manera l’impacte serà mínim , però tingues en comte que tant l’acció de modificar els URL com la de les redireccions ha de ser ha de ser molt conjunta una de l’altra i evitar 404 per part del Craw de Google.

      No és tan important però tingues en compte fer un sitemap per a cada idioma i veure la possibilitat del rel=»alternate» en cas que et vulguis posicionar en diversos països amb el mateix idioma, evitant continguts duplicats .

      Si et puc ajudar en alguna cosa més no dubtis en dir-m’ho Ramon.

      Responder
  5. Cris
    Cris Dice:

    Hola Jordi,

    He instal·lat el QTranslate a un WooCommerce i per canviar els idiomes de les pàgines no tinc cap problema, és senzill però com ho he de fer per a canviar el dels menús? Quan ho canvio a un lloc se’m modifica a tots els idiomes…

    Responder
  6. Giancr
    Giancr Dice:

    Hola a todos,
    comparto un problema que tuve y despues de varias pruebas logre solucionarlo. Tengo mi web con el QTranslate en dos idiomas EN (por defecto) y ES, por ejemplo si estaba en ES al hacer clic sobre el logo de mi blog me dirigia al inicio pero con el idioma por defecto (EN), para solucionar esto y que me envie al mismo idioma implemente esto en el header.php

    URL ORIGINAL DEL LOGO:
    href=»»

    URL DESPUES DE AGREGAR CÓDIGO DE IDIOMA:
    href=»< ?php _e("//es«); ?>»

    Recordar borrar los espacios antes de los ?php
    Espero que a alguien le sirva.
    Por cierto si quereis visitar mi web que aun estoy traduciendo: http://www.giancr.com ó http://www.giancr.com/es
    PD. Por favor al administrador borrar mi comentario anterior que no salio bien los Códigos.

    Responder
    • Jordi Esquerigüela
      Jordi Esquerigüela Dice:

      Hola Giancr,

      Muchas gracias por compartir con todos el problema que tenías con QTranslate y la manera de solucionarlo.

      Por cierto, veo que eres diseñador y estás en Barcelona. Con tu permiso guardo tu contacto para posibles colaboraciones con mi empresa de Marketing (JEVnet.es).

      P.D. El comentario anterior está borrado 😉

      Responder
  7. Alex
    Alex Dice:

    Hola a todos, tengo un problema con mi pagina y qtranslate y os lo comento a ver si veis la solución.
    En la home hay un botón que te lleva al portafolio (Nuestros eventos) y quisiera que fuera en su idioma correspondiente. he solucionado lo del logo que vaya a la home en cada uno de sus idiomas pero con el botón me pierdo. Gracias por vuestra ayuda!
    Mi pagina aun en proceso es : http://events-barcelona.com

    Responder
  8. Giancr
    Giancr Dice:

    Hola Alex
    puedes probar con esto

    if(qtrans_getLanguage()=='en'):
    echo " el html de tu boton en ingles";
    endif;
    if(qtrans_getLanguage()=='cat'):
    echo " el html de tu boton en ingles";
    endif;
    if(qtrans_getLanguage()=='es'):
    echo " el html de tu boton en español";
    endif;

    Responder
  9. Rosa
    Rosa Dice:

    Hola,

    Estoy trabajando en una web multi-idioma y multi-site con Wodpress y qTranslate. En los menús de navegación necesito referenciar links directos a páginas de otro sitio de wordpress. Al referenciar un link directo, el usuario es redirigido al link sin tener en cuenta el idioma en el que está navegando. ¿Cómo podría indicar un link «condicional» en función del idioma? Por ejemplo: si se está navegando en inglés, el link debería ser http://…….com, si se está en castellano http://….com/?lang=es…

    He intentado añadir el código que indicas en el archivo qtranslate_hooks.php pero no me ha funcionado (aunque he tenido la esperanza de que por fin había encontrado la solución!!).

    Muchas gracias!

    Responder

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.