Aller au contenu
thick

[Wordpress] éviter l'affichage des doublons

Noter ce sujet :

Recommended Posts

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 :(

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 :

   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 :

   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 :

   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.
...

   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 :

#
#
<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-->

#
<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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :)

Partager ce message


Lien à poster
Partager sur d’autres sites

J'suis débordé au boulot ...

J'essaye de choper un peu de temps ce soir pour mettre en place la boucle quivabien :unsure:

Partager ce message


Lien à poster
Partager sur d’autres sites

Cela dit, je ne comprends pas pourquoi ma fonction ne marche pas :(

Je ne vois rien qui cloche dedans et pourtant ça n'éradique pas les doublons.

Partager ce message


Lien à poster
Partager sur d’autres sites

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. ;) )

Ca donnerait quelque chose comme ca :

  $do_not_duplicate[] = $post->ID;

puis :

  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.. :D

( une p'tite semaine encore.. )

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Nico pour ta réponse, mais je crois que tu suréstimes mes capacités en dév :lol:

En d'autres mots, je n'ai rien compris...

Partager ce message


Lien à poster
Partager sur d’autres sites

Hmmm non, ce plug éradique le duplicate content, mais n'adresse pas mon problème.

Cela dit, il est pas mal ;)

J'ai mailé ma page à Anonymus et j'attends sa réponse.

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello je me retrouves exactement avec le même probléme!

Mais posts sont en doublon , chaque post appartient à plusieurs catégories.
J'ai teste ce que hubmaster a suggérer plus haut , même avant à l'aide du codex , je dois certainement mal m'y prendre. Du coup j'aurais aimée connaitre la suite de votre dusussion ^^

 

Voila mon code:

<?php
/**
 * The template for displaying a grid item.
 *
 * @package WordPress
 * @subpackage Edition
 * @since Edition 1.0
 */

    $query = new WP_Query( array( 'category__not_in' => array( 32 ) ) );
?>
    

    <?php $do_not_duplicate[] = $post->ID; ?>
    
    <?php if( in_array($do_not_duplicate , $post->ID)) : ?>
    <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post();?>



<?php

global
$tw_section, // section object
$grid_size, // grid size
$post;       // section object

$section_id    = get_the_ID($post);  // section id
$tw_categories = get_categories();   // get all post categories
$post_type     = get_post_type();


$thumbnail_size = 'half';
$thumbnail_size = ($grid_size == 'fullgrid') ? 'big' : $thumbnail_size;
if ($grid_size == 'related') {
    $thumbnail_size = 'related';
} ?>

<div class="<?php if ( isset($tw_categories[0]->term_id) ) { echo 'highlight_category_' . $tw_categories[0]->term_id; } ?> <?php echo (has_post_thumbnail()) ? 'has-thumbnail' : 'no-thumbnail'; ?> <?php echo $grid_size;?> grid-item">
    <div class="isobrick-inner">
        <?php
            the_post_thumbnail($thumbnail_size, array(
                'onload' => 'jQuery(this).animate({ "opacity" : 0.75 }, 500);'
            ));
        ?>

        <?php echo themewich_review_circle('none', false); ?>

        <?php if ( 'post' == $post_type ) : ?>
            <span class="thumboverdate">
                <i class="fa fa-bookmark"></i>
                <?php themewich_date('human'); ?>
            </span>
        <?php else: ?>
            <?php if ( function_exists( 'wc_get_template' ) ) : ?>
                <span class="thumboverdate">
                    <?php wc_get_template( 'loop/price.php' ); ?>
                </span>
            <?php endif; ?>
        <?php endif; ?>

        <div class="thumbovertext">
            <div class="badge">
                <?php echo ag_get_cats(3); ?>
            </div>
            <h2 class="title">
                <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                    <?php
                        $title = get_the_title();
                        if (strlen($title) >= 75) {
                             $title = mb_substr($title, 0, 75) . "... ";
                        }
                        echo $title;
                    ?>
                </a>
            </h2>

            <?php if ( 'post' == $post_type ) : ?>
                <?php preg_match('/<!--more(.*?)?-->/', $post->post_content, $matches); ?>
                <a class="button outline" href="<?php the_permalink(); ?>"  title="<?php the_title_attribute(); ?>">
                    <?php
                        if ( isset($matches[1]) && $matches[1] ) {
                            echo $matches[1];
                        } else {
                            _e('Read More', 'themewich');
                        }
                    ?>
                </a>
            <?php endif; ?>

        </div>

        <a class="brick-thumb-link" href="<?php the_permalink(); ?>"  title="<?php the_title_attribute(); ?>">
            <?php the_title(); ?>
        </a>
    </div>
</div>



<?php endwhile; ?>
<?php endif; ?>
<?php endif; ?>
<?php wp_reset_query(); ?>

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

  • Contenu similaire

    • Par prem
      Hello j'aurais besoin urgemment de votre aide svp... Cela fais des jours que je bloques.
      Voilà j'ai des posts , chaque posts a plusieurs categories.
      j'ai fais une requete wp_query pour lister tous les posts sauf une categorie ,mais je me retrouves avec des doublons . voila mon code 
      <?php /** * The template for displaying a grid item. * * @package WordPress * @subpackage Edition * @since Edition 1.0 */ $do_not_duplicate = array(); $query = new WP_Query( array( 'category__not_in' => array( 32 ) ) ); if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); $do_not_duplicate[] = $post->ID; global $tw_section, // section object $grid_size, // grid size $post; // section object $section_id = get_the_ID($post); // section id $tw_categories = get_categories(); // get all post categories $post_type = get_post_type(); $thumbnail_size = 'half'; $thumbnail_size = ($grid_size == 'fullgrid') ? 'big' : $thumbnail_size; if ($grid_size == 'related') { $thumbnail_size = 'related'; } ?> <div class="<?php if ( isset($tw_categories[0]->term_id) ) { echo 'highlight_category_' . $tw_categories[0]->term_id; } ?> <?php echo (has_post_thumbnail()) ? 'has-thumbnail' : 'no-thumbnail'; ?> <?php echo $grid_size;?> grid-item"> <div class="isobrick-inner"> <?php the_post_thumbnail($thumbnail_size, array( 'onload' => 'jQuery(this).animate({ "opacity" : 0.75 }, 500);' )); ?> <?php echo themewich_review_circle('none', false); ?> <?php if ( 'post' == $post_type ) : ?> <span class="thumboverdate"> <i class="fa fa-bookmark"></i> <?php themewich_date('human'); ?> </span> <?php else: ?> <?php if ( function_exists( 'wc_get_template' ) ) : ?> <span class="thumboverdate"> <?php wc_get_template( 'loop/price.php' ); ?> </span> <?php endif; ?> <?php endif; ?> <div class="thumbovertext"> <div class="badge"> <?php echo ag_get_cats(3); ?> </div> <h2 class="title"> <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"> <?php $title = get_the_title(); if (strlen($title) >= 75) { $title = mb_substr($title, 0, 75) . "... "; } echo $title; ?> </a> </h2> <?php if ( 'post' == $post_type ) : ?> <?php preg_match('/<!--more(.*?)?-->/', $post->post_content, $matches); ?> <a class="button outline" href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"> <?php if ( isset($matches[1]) && $matches[1] ) { echo $matches[1]; } else { _e('Lire la suite', 'themewich'); } ?> </a> <?php endif; ?> </div> <a class="brick-thumb-link" href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"> <?php the_title(); ?> </a> </div> </div> <?php endwhile; ?> <?php endif; ?> <?php wp_reset_query(); ?>  
       
       
      et quand je fais un var_dump ($do_not_duplicate);
      j'obtiens 
      array(1) { [0]=> int(470) }
      array(2) { [0]=> int(470) [1]=> int(368) } 
      array(3) { [0]=> int(470) [1]=> int(368) [2]=> 
       
       
      et je souhaiterai avec l'aide d'un foreach ne poster mon article qu'une fois
    • Par Theode69
      Bonjour à tous, sachez que votre réponse me sera d'une très grande aide ! 
       
      Je suis actuellement entrain de créer un  site pour une université. L'objectif est d'avoir terminé avant la fin du mois d'aout une version test/un MVP simple mais fonctionnel. Pour résumer, mon but est de simplifier et rendre plus rapide les inscriptions des étudiants auprès des professionnels. Ce site contiendra une partie pour les étudiants, une pour les professionnels.
       
      Pour faire simple chaque étudiant aura  un compte perso, sur lequel il pourra ajouter des documents (carte d'identité, RIB, justificatif de domicile, etc) afin de les stocker dans un cloud. 
       
      De l'autre côté, les professionnels (auto école, salle de sport, assurance, protection sociale, opérateur téléphonique) auront un espace dédié à leur activité. Ils auront une fiche résumant leur entreprise (secteur, téléphone, localisation) et ils renseigneront les documents nécessaire lors de l'inscription à leurs services. 
      Pour s'inscrire, l'étudiant n'aura plus qu'a autoriser l'accès à ses documents (préalablement enregistrés dans le cloud) évitant ansi de perdre du temps sur place en passant par la dématérialisation de l'inscription. 
       
      Le projet devra donc contenir : 
       
      une zone de connection privée pour chaque utilisateur et entreprise la liaison avec un cloud (je pensais sous traiter la gestion du cloud  à une entreprise spécialisée)  si possible une barre de recherche permettant de trouver les professionnels répondant aux besoins des utilisateurs  la possibilité pour le professionnel de télécharger les documents auxquels ils a été autorisé afin de procéder à l’inscription  si possible (pas urgent car surement compliqué) que chaque professionnel puisse établir une page de pré inscription où l’utilisateur remplie ses données de manières manuscrites (prénom, nom, mail, etc) avant de compléter l’inscription avec les documents justificatifs contenus dans le cloud   
       
      Ayant de bonnes bases en HTML+CSS et quelques connaissances concernant Java Script j'hésite encore sur la forme que pourra prendre le site. 
      Soit il m’est possible d’utiliser WordPress.org en utilisant différents plug ins (mais il y en a t-il qui permettent réellement de remplir tout ces objectifs?). 
      Soit je pensais créer mon site à l’aide de Meteor.Js ou Node.Js …

      Quelles solutions préconisez vous ? Si aucune ne vous semble adaptée selon vous comment pourrais je faire pour créer ce MVP ? Comment feriez vous pour commencer ce projet ? 
      Merci énormément pour l’aide que vous pourrez m’apporter dans cette aventure ! Je suis disponible si vous voulez échanger plus longuement. 
       
      Bien cdt 
      Théo R
    • Par Hypatech
      Depuis un moment je me pose une questions, J'utilise pour mon site le plugin SEO Wordpress by Yoast.
      Ce plugin permet de cibler par mot clé pour que la page soit trouvé plus facilement par Google sur ce mot-clé.
      N'aurais-je pas intérêt à ne pas utiliser un plugin qui cible seulement un mot clé et qui empêche peut être les moteurs de recherche de mettre en avant d'autre mot-clé de mes articles ?
    • Par Toulonweb
      Bonjour,
      je souhaite réaliser une section annuaire sur un site tournant sous wordpress,
      j'ai eu beau chercher a droite et a gauche mais rien à part 2 plugins qui ne sont plus mis a jours depuis des années.
      Je précise que je ne souhaite pas faire un site annuaire mais seulement une section sur un site existant.
      J'ai bien tenté arffo mais il n'est plus compatible avec php 5
      Auriez vous une piste?
       
      Merci d'avance.
       
      Nicolas
    • Par fbern
      Bonjour
       
      j'ai un vieux site sous wordpress, et je voudrais faire une dizaine de redirections.
      Je n'ai pas besoin d'expressions régulières, c'est du 1 pour 1.
      N'étant pas développeur, pouvez vous m'aider: dois-je obligatoirement utiliser mod rewrite ?
      Est-ce que vous n'auriez pas une solution plus simple car je n'ose pas mettre les mains dans Apache?
      merci
×