J'ai un site Wordpress traduit de dansk en anglais en utilisant WPML. Dans celui-ci, j'ai une page qui utilise un modèle de page personnalisé pour afficher les titres de tous les messages. Malheureusement, tous les articles sont affichés deux fois: l'original et le traduit.
C'est le code que j'ai:
<ul id="archive-list">
<?php $args = array(
'lang' => ICL_LANGUAGE_CODE,
'numberposts' => '-1',
'post_type' => 'post',
);
$myposts = get_posts($args);
foreach($myposts as $post) : ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>
Quelqu'un at-il une idée de ce que je dois faire pour que cette page affiche uniquement les titres dans la langue actuelle?
Pour que le filtre de langage de WPML prenne effet, vous devez autoriser les filtres dans get_posts. Par défaut c'est désactivé.
Vous pouvez ajouter suppress_filters=0
à vos arguments get_posts et cela devrait fonctionner. Voir: http://codex.wordpress.org/Template_Tags/get_posts#Parameters
<ul id="archive-list">
<?php $args = array( 'suppress_filters' => false, 'numberposts' => '-1', 'post_type' => 'post', );
$myposts = get_posts($args);
foreach($myposts as $post) : ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>
Je pense que la raison pour laquelle le contenu est affiché dans toutes les langues est que l'argument de code de langue ne devrait pas figurer dans le tableau.
Je n'utilise généralement pas non plus de filtres surpress.
Si vous avez correctement configuré WPML, vous pouvez utiliser une requête personnalisée comme celle-ci:
<h2><?php _e('Archive','textdomain'); ?></h2>
<ul id="archive-list">
<?php $loop1 = new WP_Query( array( 'post_type' => 'post', 'posts_per_page' => -1 ) ); ?>
<?php while ( $loop1->have_posts() ) : $loop1->the_post(); ?>
<li><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Link to %s', 'textdomain' ), the_title_attribute( 'echo=0' ) ); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>