Bonjour à tous, je suis en train de créer mon portfolio via Wordpress.

J'ai donc crée 2 catégories Compétences/Portfolio qui se trouvent dans mon menu.

J'utilise cette boucle pour afficher les catégories :

<?php query_posts("order=asc"); /*Affichage de l'article du plus ancien au plus recent*/?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <div class="">
        <h2 class=""><?php the_title(); ?></h2>
        <?php the_content(); ?>
    </div>
<?php endwhile;endif; ?>

Les articles s'affichent bien,aucun probleme pour ça, le probleme que j'ai, est que, à l'affichage les articles se trouvant dans la categorie Portfolio s'affichent avec ceux de Compétences et inversement.

Que faut-il ajouter dans la boucle pour que le tri par catégorie se fasse ?

Merci d'avance et bonne journée.

21 réponses


coloo
Réponse acceptée

Bonjour,

Je t'ai décortiqué comment j'ai procédé dans les commentaires du code.
PAGE CATEGORIE

<?php get_header(); ?>
<div class="jumbotron">
    <div class="container">
        <h1><?php wp_title("",true); 
            //Je récupère le nom de l'article
            $name= wp_title( "", false); ?> </h1>   
    </div>
</div>
<div class="container">

<?php
//Je liste mes catégories
$args = array(
  'orderby' => 'name',
  'order' => 'ASC'
  );
$categories = get_categories($args);
  foreach($categories as $category) { 
    $recherche=$category->name;
    $recherche=' '.$recherche;
    //Je compare le nom de l'article avec le nom de mes catégorie
    if($recherche==$name){
       //Je récupère le slug de la catégorie actuelle 
       $slug=$category->slug;
    }

  } 
// J'affiche mes posts via le slug de la catégorie  
$args = 'category_name='.$slug;
$the_query = new WP_Query( $args );
while ( $the_query->have_posts() ) : $the_query->the_post();
    $title = the_title('', '', false);

    echo '<div class=""><h2>';
    the_title();    
    echo '</h2><div>';
    the_content();
    echo '</div></div>';
endwhile;
echo '</div>';
get_footer(); ?>

Wordpress ne fait pas cela de base dans le backend ?

Je ne sais pas, c'est pour ça que je demande

récupère l'id de ta catégorie et ensuite, tu fais :

<?php
// exemple cat 1
$args = 'cat= 1';
$the_query = new WP_Query( $args );
while ( $the_query->have_posts() ) :
        $the_query->the_post();
    the_content();
endwhile;
wp_reset_postdata();

link wp forum francophone

FAQ

Ca me fait toujours le meme probleme, la categorie Portfolio affiche toujours les articles de la catégorie Competences et Portfolio et pareil pour la categorie Competences

Tu as commencé avec un thème de base ou pas ?

Non un thème de zéro

Question peut être stupide mais t'es tu assuré que les articles n'ont pas les deux catégories actives? Si c'est le cas assure toi d'en décocher une !
Sinon ce qu'a écrit coloo me semble correct !

Cordialement,

Salut Lotfi, non les catégories ont bien 2 catégories distinctes

Peux-tu me montrer où tu as inséré mon code.

Dans ma page category.php

<?php get_header(); ?>
<div class="jumbotron">
    <div class="container">
        <h1><?php wp_title("",true); ?></h1>    
    </div>
</div>
<!-- <div class="container">
<?php query_posts("order=asc"); /*Affichage de l'article du plus ancien au plus recent*/?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <div class="col-lg-4">
        <h2 class="titre-article"><?php the_title(); ?></h2>
        <?php the_content(); ?>
    </div>
<?php endwhile;endif; ?>
</div> -->
<div class="container">
    <?php
    // exemple cat 1
    $args = 'cat=4';
    $the_query = new WP_Query( $args );
    while ( $the_query->have_posts() ) :
            $the_query->the_post();
        the_title();
        the_content();
    endwhile;
    wp_reset_postdata();
    ?>
</div>
<?php get_footer(); ?>

Bonjour,

Si tu n'as toujours pas résolu ton problème. Je veux bien continuer à t'aider mais je suis à court d'idée théorique. J'ai besoin de mettre mes mains dans le cambouis.

Envois moi ton projet par mail mail@mail.fr .

J'éditerais mon post pour modifier mon mail.

Spécifies moi ton log et exporte ta base sql pour que je puisse faire les mêmes test que toi.

++

Je ne vois qu'une chose qui peut faire que ça bug.
Assures toi qu'une des catégories n'est pas enfantes de l'autre.
Le code sert à afficher toutes les catégories enfantes à la catégorie avec l'id 4 ici.
En gros tu affiches la catégorie avec l'id 4 et toutes ses catégories enfants !

Autre choses, assures toi que c'est bien category.php qui est appelé en faisant des tests où tu remarques un changement.

Y a toutes mes categories et sous categories

Bonjour, j'ai eu ce même problème pour afficher des articles de deux catégories différentes dans Wordpress.

J'ai utilisé ce bout de code et tout fonctionne parfaitement :

<?php
$categories = get_all_category_ids();
    foreach($categories as $i) {
    if ($i != 1 && $i != 4) {
echo '<h3>Articles récents</h3>';
$articles = get_posts('category='.$i.'');

    foreach($articles as $post) {
    setup_postdata($post);
?>

L'ID 1 des catégories correspond à la catégorie Non classé et l'ID 4 correspondait aux articles que j'avais posté sous une autre catégorie (j'avais 2 catégories : blog et Agenda. L'ID 4 correspond à Agenda)
Un petit tour dans la base de donnée pour récupérer les ID des catégories (si tu as accès à la base de données) et c'est bon !

Sinon, tu fait un petit :

<?php echo get_the_category_by_ID(); ?>

pour trouvé la catégorie en fonction de l'ID ;)

Edit : correction sur les ID...

J'ai essayé ta solution, et j'en arrive toujours au même point, les catégories ne se trient et affichent les articles qui ne les concernent pas...

Un mail de ton projet pour que j'y jette un œil ?

Je t'ai envoyé par mail le theme et la BDD

Merci beaucoup coloo, et ainsi qu'aux autres !

Il te manquera à afficher les sous-category pour les sous sections.

Voilà un chemin qui pourra être intéressant afin de voir si tu as bien compris le procédé ;)

Voilà un lien qui peut t'aider pour démarrer : http://blog.websourcing.fr/wordpress-afficher-sous-categories-dans-boucle/

Ok merci je regarderai ça plus tard