Boucle affichant article par categorie

Par dynamizer, il y a 12 ans


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, il y a 12 ans

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

coloo, il y a 12 ans

Wordpress ne fait pas cela de base dans le backend ?

dynamizer, il y a 12 ans

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

coloo, il y a 12 ans

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

dynamizer, il y a 12 ans

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

coloo, il y a 12 ans

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

dynamizer, il y a 12 ans

Non un thème de zéro

Lotfi Berrahal, il y a 12 ans

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,

dynamizer, il y a 12 ans

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

coloo, il y a 12 ans

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

dynamizer, il y a 12 ans

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(); ?>
Romano83, il y a 12 ans

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

coloo, il y a 12 ans

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.

++

Lotfi Berrahal, il y a 12 ans

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.

dynamizer, il y a 12 ans

Y a toutes mes categories et sous categories

dynamizer, il y a 12 ans

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

dynamizer, il y a 12 ans

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

coloo, il y a 12 ans

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(); ?>
dynamizer, il y a 12 ans

Merci beaucoup coloo, et ainsi qu'aux autres !

dynamizer, il y a 12 ans

Ok merci je regarderai ça plus tard