Version complète: sur le forum Webmaster Hub : [Wordpress] éviter l'affichage des doublons
Webmaster Hub > Création et exploitation de Sites Internet > Systèmes de publication
thick
Bonjour à tous,

Je relance sur le Hub un thread que j'avais lancé sur le support WP Francophone car je n'ai pas résolu mon problème sad.gif

Sur l'accueil de Adicie.com , j'affiche les derniers billets parus, ainsi que chaque dernier billet par catégorie.
Du coup, je me retrouve avec des doublons que je voudrais éradiquer.
Le but serait de fabriquer une boucle qui indiquerait que si un billet est paru dans "derniers articles parus", il ne doit pas s'afficher ailleurs.

Au départ, mon code est :

- Pour les derniers articles parus :
CODE
   1.
      <?php _e('Derniers articles parus'); ?></h3>
   2.
      <?php query_posts('showposts=3'); ?>
   3.
        <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
   4.
      <?php the_date('j F Y') ?> par <?php the_author() ?> <br />
   5.
      <a href="<?php the_permalink(); ?>" title="<?php the_title() ?>" class="title"><?php the_title() ?></a>
   6.
      <?php the_excerpt(); ?>
   7.
      [ <a href="<?php the_permalink() ?>" rel="bookmark" title="Lien permanent vers <?php the_title(); ?>">Lire la suite</a> ]<br /><br />
   8.
        <?php endwhile; endif; ?>


- Pour les derniers billets dans leur catégorie :
CODE
   1.
      <?php
   2.
      // this is where the Politique module begins    
   3.
        query_posts('showposts=2&cat=10'); ?>
   4.
          <h3><?php
   5.
        // this is where the name of the Politique category gets printed    
   6.
        wp_list_categories('include=10&title_li=&style=none'); ?></h3>
   7.
          <?php while (have_posts()) : the_post(); ?>
   8.
          <div class="feature"><a href="<?php the_permalink() ?>" rel="bookmark" title="Lien permanent vers <?php the_title(); ?>"></a><a href="<?php the_permalink() ?>" rel="bookmark" class="title">
   9.
            <?php
  10.
      // this is where title of the Politique gets printed    
  11.
          the_title(); ?></a>
  12.
                <?php
  13.
      // this is where the excerpt of the Politique gets printed    
  14.
        the_excerpt(); ?>
  15.
          [ <a href="<?php the_permalink() ?>" rel="bookmark" title="Lien permanent vers <?php the_title(); ?>">Lire la suite</a> ]    
  16.
            </div>
  17.
          <?php endwhile; ?>


En m'aidant de http://codex.wordpress.org/The_Loop et du code suivant, j'ai tenté de modifier pour donner ce qui suit plus loin :
CODE
   1.
      <?php _e('Derniers articles parus'); ?></h3>
   2.
      <?php query_posts('showposts=3'); ?>
   3.
        <?php if (have_posts()) : while (have_posts()) : the_post();
   4.
      $local_ids[] = $post->ID;
   5.
      ...


CODE
   1.
      <?php
   2.
      // this is where the Politique module begins  
   3.
      // passer le nombre de posts demandés de 2 à 5 pour s'assurer d'avoir un nombre suffisant de posts
   4.
        query_posts('showposts=5&cat=10'); ?>
   5.
          <h3><?php
   6.
        // this is where the name of the Politique category gets printed  
   7.
        wp_list_categories('include=10&title_li=&style=none'); ?></h3>
   8.
          <?php while (have_posts()) : the_post();
   9.
      if(in_array($local_ids,$post->ID)) continue;
  10.
      else $post_counter++;
  11.
      ...l'affichage du billet...
  12.
      if($post_counter > 2) break;
  13.
          <?php endwhile; ?>


Et donc je fais ça :

CODE
#
#
  <div class="feature clearfloat" id="lead">
#
<h3><?php _e('Derniers articles parus'); ?></h3>
#
  <?php if (have_posts()) : while (have_posts()) : the_post();
#
  if( $post->ID == $do_not_duplicate ) continue; update_post_caches($posts); ?>
#
<?php the_date('j F Y') ?> par <?php the_author() ?> <br />
#
<a href="<?php the_permalink(); ?>" title="<?php the_title() ?>" class="title"><?php the_title() ?></a>
#
<?php the_excerpt(); ?>
#
[ <a href="<?php the_permalink() ?>" rel="bookmark" title="Lien permanent vers <?php the_title(); ?>">Lire la suite</a> ]<br /><br />
#
  <?php endwhile; endif; ?>
#
  </div><!--END FEATURE-->



CODE
#
  <div id="leftcol">
#

#
    <h3><?php
#
  // this is where the name of the France category gets printed  
#
  wp_list_categories('include=5&title_li=&style=none'); ?></h3>
#
    <?php $my_query = new WP_Query('category_name=france&showposts=1');
#
  while ($my_query->have_posts()) : $my_query->the_post();
#
  $do_not_duplicate = $post->ID; ?>
#
    <div class="feature"><a href="<?php the_permalink() ?>" rel="bookmark" title="Lien permanent vers <?php the_title(); ?>"></a><a href="<?php the_permalink() ?>" rel="bookmark" class="title">
#
    <?php
#
// this is where the title of the France gets printed  
#
  the_title(); ?></a>
#
    <?php
#
// this is where the excerpt of the France gets printed  
#
  the_excerpt(); ?>
#
    [ <a href="<?php the_permalink() ?>" rel="bookmark" title="Lien permanent vers <?php the_title(); ?>">Lire la suite</a> ]
#
    </div>
#
  <?php endwhile; ?>


Mais niet, les doublons demeurent au garde-à-vous !

Dan m'a dit que nous avions de grands spécialistes WP sur le Hub, donc j'espère qu'un ou deux passeront par ici pour me sortir de cette impasse.

Merci d'avance
Marie-Aude
Dans les fonctions WP qui listent les messages par catégories, il suffit de mettre un catégorie ID précédée d'un "-" pour l'exclure.
thick
Je ne veux pas exclure une catégorie.
ALeX!S
Pourquoi ne pas récupérer les id's des billets qui sont affichés (dans un tableau php), et checker se tableau pour ne pas afficher 2 fois un billet identique.
thick
Pas bête, mais je peine encore à voir comment coder ça vu que mes compétences sont minimalistes.

Tu ne voudrais pas me montrer un petit bout du chemin ? Ca serait sympa smile.gif
ALeX!S
J'suis débordé au boulot ...

J'essaye de choper un peu de temps ce soir pour mettre en place la boucle quivabien unsure.gif
thick
Cela dit, je ne comprends pas pourquoi ma fonction ne marche pas sad.gif
Je ne vois rien qui cloche dedans et pourtant ça n'éradique pas les doublons.
Anonymus
Salut,

T'as rajouté ca ? :
$do_not_duplicate = $post->ID;

A priori, comme ca, tu récupères le dernier $post->ID.
Or il ne te faut pas le dernier, mais il te les faudrait tous.
Pour cela, l'idéal serait de les stocker dans un tableau.
Ensuite, au lieu de vérifier si c'est égal :
if( $post->ID == $do_not_duplicate ) continue;
Tu vérifies si c'est 'dans le tableau'.
D'ailleurs, tu peux même vérifier si ' ca n'est pas dans le tableau' > Si ca ne l'est pas, alors tu l'affiches (sinon, sous entendu, tu zappes. wink.gif )
Ca donnerait quelque chose comme ca :

CODE
  $do_not_duplicate[] = $post->ID;


puis :
CODE
  if( in_array($do_not_duplicate , $post->ID)){
// Là, tu mets tout ce qu'il y a dans la boucle while..
};


Voilà.
Dsl pour le temps de réponse, mais à par au cyber, sinon j'ai pas d'adsl.. biggrin.gif
( une p'tite semaine encore.. )
thick
Merci Nico pour ta réponse, mais je crois que tu suréstimes mes capacités en dév laugh.gif
En d'autres mots, je n'ai rien compris...
Anonymus
Alors envoies moi les codes wink.gif
nicoo
Salut,

Il existe un plugin wp pour éviter le duplicate content : http://www.seologs.com/wordpress-duplicate-content-cure/

Après je ne suis pas certain que cela réponde à ton besoin spécifique. Peux tu m'indiquer ta version wordpress ? Et tu tourne sous php4 ou php5 ?

thick
Hmmm non, ce plug éradique le duplicate content, mais n'adresse pas mon problème.
Cela dit, il est pas mal wink.gif
J'ai mailé ma page à Anonymus et j'attends sa réponse.
nicoo
Oui je me doutais bien que cela ne répondait pas à ta problématique, mais vu que l'on parle de duplicate content ça ne coute rien de le signaler smile.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.