Custom Post Type y qTranslate. Hacer funcionar Permalinks

Cuando creamos Custom Post Type para un wordpress que utilice qTranslate, tenemos que asegurarnos de que este plugin nos direccione bien a los posts en cada idioma. Por ejemplo, si queremos que el qTranslate reconozca el Permalink del Custom Post Type que hemos creado, tendremos que editar el archivo /wp-content/plugins/qtranslate/qtranslate_hooks.php y simplemente añadir add_filter(‘post_type_link’, ‘qtrans_convertURL’);
después de post_link. Así quedaría:

add_filter('page_link',						'qtrans_convertURL');
add_filter('post_link',						'qtrans_convertURL');
add_filter('post_type_link',					'qtrans_convertURL');

Y ahora el wordpress sabrá redireccionarnos al contenido del post en el idioma en el que nos encontremos.

Script para dividir URL. Muy útil para qTranslate

Me encontré más de una vez con el problema de hacer funcionar el plugin qTranslate con otros plugins o scripts. A veces el fantástico qTranslate no es reconocido por otros plugins, o por scripts que añadimos.

Se me ocurrió una manera un poco casera pero eficaz para solucionar estos problemas y poder utilizar the_Permalink dentro del Loop de wordpress, para todos los idiomas que tenga activados.

Para esto necesitamos tener activadas las url amigables de nuestro WordPress.
Vamos a Settings->Permalinks y activamos el modo post.

Y hacemos lo mismo para el qTranslate. En Settings ->Idiomas, activamos “Usar modo de pre-ruta (Por defecto, pone /es/ delante de la URL)”.

Este script está escrito para poder hacer funcionar el plugin All-in-One Event Calendar cuyos enlaces a los posts de eventos no funcionaban para los idiomas. Pero os servirá para cualquier situación, ya que estamos trabajando en la url.
Así venían las url de los posts de eventos:

http://example.com/ai1ec_event/mi_evento/?instance_id=1

Y ahora el script:

<?php
$permalink=esc_attr( get_permalink($event->post_id ) . $event->instance_id );
list( $http, $nada, $domain, $ai1ec_event, $eventid, $instanceid,)=explode("/", $permalink);
$engpermalink=$http . "//" . $domain .  "/en/" . $ai1ec_event  . "/" . $eventid . "/" . $instanceid;
$catpermalink=$http . "//" . $domain .  "/CA/" . $ai1ec_event  . "/" . $eventid . "/" . $instanceid;
?>

Lo que hacemos con las primeras dos líneas de código, es dividir la url del permalink en cachitos, asignando una variable a cada parte comprendida entre los caracteres “/”.
Luego la recomponemos, insertando en el lugar apropiado /en/ para ingles, y /CA/ para catalán.
A partir de aquí la variable $engpermalink será mi Permalink para el ingles y $catpermalink para el catalán.
Así que, en mi loop, pondré este código para que los Permalinks cambien en función del idioma en el que se encuentre quien navega:


 <?php if (qtrans_getLanguage() == 'es') : ?>
<h4><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php echo the_title(); ?></a></h4>
           <?php elseif (qtrans_getLanguage() == 'en') : ?>
<h4><a href="<?php echo $engpermalink ;?>" title="<?php the_title(); ?>"><?php echo the_title(); ?></a></h4>
           <?php elseif (qtrans_getLanguage() == 'ca') : ?>
<h4><a href="<?php echo $catpermalink ;?>" title="<?php the_title(); ?>"><?php echo the_title(); ?></a></h4>
<?php endif; ?>

Y listo!

Aquí el código completo para el Loop

<?php get_header(); ?>
<?php
$permalink=esc_attr( get_permalink($event->post_id ) . $event->instance_id );
list( $http, $nada, $domain, $ai1ec_event, $eventid, $instanceid,)=explode("/", $permalink);
$engpermalink=$http . "//" . $domain .  "/en/" . $ai1ec_event  . "/" . $eventid . "/" . $instanceid;
$catpermalink=$http . "//" . $domain .  "/CA/" . $ai1ec_event  . "/" . $eventid . "/" . $instanceid;
?>

 <?php if(have_posts()) : while(have_posts()) : the_post(); ?>
<div class="the_content">
      <?php if (qtrans_getLanguage() == 'es') : ?>
<h4><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php echo the_title(); ?></a></h4>
           <?php elseif (qtrans_getLanguage() == 'en') : ?>
<h4><a href="<?php echo $engpermalink ;?>" title="<?php the_title(); ?>"><?php echo the_title(); ?></a></h4>
           <?php elseif (qtrans_getLanguage() == 'ca') : ?>
<h4><a href="<?php echo $catpermalink ;?>" title="<?php the_title(); ?>"><?php echo the_title(); ?></a></h4>
<?php endif; ?>
		<?php the_content(); ?>
<?php endwhile; // end of the loop. ?>
</div><!--the_content-->