Obtener posts en otro idioma con WPML antiguo

  • Autor Autor Shaman
  • Fecha de inicio Fecha de inicio
S

Shaman

Estoy intentando ejecutar una consulta que me devuelva una serie de posts. Si ejecuto esta consulta con el idioma base (inglés), me devuelve los resultados esperados. Sin embargo, si ejecuto la misma consulta en cualquier otro idioma, no me devuelve ningún resultado.

El plugin que estoy utilizando para las traducciones es el WPML, pero por limitaciones del servidor, tengo que utilizar una versión bastante antigua (la 2.0.4.1), la cual afortunadamente es gratuita. Si desactivo el plugin, la consulta se ejecuta sin problemas, por lo que parece claro que es un problema de compatibilidad del plugin con Wordpress.

La consulta en cuestión es la siguiente:

<?php $objPosts = new WP_Query(array('posts_per_page' => '100', 'category__and' => array( 13 ), 'category__not_in' => array( 15 ))); ?>

Por internet, he logrado averiguar que algunos lo han solucionado con el siguiente código:

<?php if(isset($_COOKIE['_icl_current_language']) && defined('ICL_SITEPRESS_VERSION')){
global $sitepress;
$sitepress->switch_lang($_COOKIE['_icl_current_language']);
} ?>

Sin embargo, a mí me sale un error de Call to undefined method SitePress::switch_lang(), por lo que supongo que esa solución no me sirve porque estoy utilizando una versión bastante anticuada del plugin.

¿A alguien se le ocurre una solución?

Tal como he mencionado anteriormente, estoy bastante limitado por el servidor en el que estoy trabajando, por lo que estoy utilizando Wordpress 2.8.6 y WPML 2.0.4.1.
 
Dado que estás utilizando una versión tan antigua de WPML, es posible que la función `switch_lang()` no esté disponible en esa versión específica. En su lugar, podrías intentar manipular directamente la consulta de WP_Query para que tenga en cuenta el idioma en el que deseas obtener los posts.

Aquí te dejo un ejemplo de cómo podrías ajustar tu consulta para que funcione según el idioma:

```php
<?php
if( function_exists('icl_object_id') ) {
$current_lang = defined('ICL_LANGUAGE_CODE') ? ICL_LANGUAGE_CODE : NULL;
$translated_post_ids = icl_get_object_id( get_the_ID(), 'post', true, $current_lang );

$objPosts = new WP_Query(array(
'posts_per_page' => -1,
'post_type' => 'post',
'post__in' => $translated_post_ids
));
}
?>
```

En este código, estamos obteniendo los IDs traducidos de los posts en base al idioma actual definido en WPML. Esto debería permitirte obtener los posts en el idioma deseado dentro de la consulta de WP_Query.

Recuerda que al trabajar con versiones tan antiguas de WordPress y sus plugins, puede haber limitaciones en cuanto a funcionalidades y compatibilidad. Espero que esta solución te ayude a obtener los resultados que necesitas. ¡Buena suerte!