Ajouter les commentaires dans une query de CPT / articles

  • WordPress :4.9.4
  • Statut : non résolu
7 sujets de 1 à 7 (sur un total de 7)
  • Auteur
    Messages
  • #2149850
    Reggio
    Participant
    Initié WordPress
    8 contributions

    Bonjour,

    Ma configuration WP actuelle

    • Version de PHP/MySQL : 5.6.38 – MySQL Community Server (GPL)
    • Thème utilisé : ocean WP perso
    • Extensions en place : …
    • Nom de l’hébergeur : local
    • Adresse du site : local

    Salut à tous,

    Je mets les mains dans le cambouis depuis quelques mois afin d’améliorer mes compétences en codage.

    J’ai créé un CPT ‘films’, et créé ma page archive-films.php. J’arrive bien à afficher toutes les infos voulues, titre thumb contenu et mes champs ACF mais je bloque au niveau des commentaires, je ne sais pas comment les intégrer à ma query. Le but est d’afficher les commentaires à chaque loop. Voici mon code, pouvez-vous me donner un petit coup de main SVP ?

    Merci d’avance 🙂

    <?php
        $args = array( 'post_type' => 'films', 'posts_per_page' => 10 );
        $loop = new WP_Query( $args );
    
        while ( $loop->have_posts() ) : $loop->the_post(); ?>
            <a href="<?php the_permalink();?>">
                <div class="card_item" style="background-image:url('<?php the_post_thumbnail_url( 'thumb_film' ); ?>')">           
                    <div class="card_content">
                        <div class="card_title"><?php the_title(); ?></div>
                        <?php if( get_field('note') == '1star' ): ?>
                            <i class="fas fa-star"></i>
                            <i class="far fa-star"></i>
                            <i class="far fa-star"></i>
                            <i class="far fa-star"></i>
                            <i class="far fa-star"></i>
                        <?php endif; ?>
                        <?php if( get_field('note') == '2stars' ): ?>
                            <i class="fas fa-star"></i>
                            <i class="fas fa-star"></i>
                            <i class="far fa-star"></i>
                            <i class="far fa-star"></i>
                            <i class="far fa-star"></i>
                        <?php endif; ?>                    
                        <?php if( get_field('note') == '3stars' ): ?>
                            <i class="fas fa-star"></i>
                            <i class="fas fa-star"></i>
                            <i class="fas fa-star"></i>
                            <i class="far fa-star"></i>
                            <i class="far fa-star"></i>
                        <?php endif; ?>
                        <?php if( get_field('note') == '4stars' ): ?>
                            <i class="fas fa-star"></i>
                            <i class="fas fa-star"></i>
                            <i class="fas fa-star"></i>
                            <i class="fas fa-star"></i>
                            <i class="far fa-star"></i>
                        <?php endif; ?>                   
                        <?php if( get_field('note') == '5stars' ): ?>
                            <i class="fas fa-star"></i>
                            <i class="fas fa-star"></i>
                            <i class="fas fa-star"></i>
                            <i class="fas fa-star"></i>
                            <i class="fas fa-star"></i>
                        <?php endif; ?>
                    </div>
    				<div class="card_comments">#Affichage de mes commentaires ici</div>
                </div>
            </a>
        <?php endwhile; ?>

     

    • Ce sujet a été modifié le il y a 6 months et 1 week par  Reggio.
    #2149878
    CAMEO172
    Participant
    Maître WordPress
    1395 contributions

    Essayer avec l’appel  wp_list_comments. Lire le codex pour voir la forme et vos moyens d’avoir un affichage conforme à votre souhait https://codex.wordpress.org/Function_Reference/wp_list_comments

    Sinon, votre façon d’afficher votre note manque de beauté (ce qui n’est pas grave) mais surtout si vous stockez votre note par des données ‘1stars’ ‘2stars’ etc.. vous vous fermez la possibilité de trier facilement vos notes. Ne stockez que du numérique (1,2,3,4 etc..) vous gagnerez énormément en traitement en plus d’un stockage moindre sur la base de données.

    Imaginez que vous souhaitez trier tous vos postes à 0 étoiles.. ou vos posts à 5 étoiles ! Si ce n’est pas du numérique pur c’est impossible ou au prix d’un traitement très lourd.

    Et pour la beauté, voici un code beaucoup plus propre pour l’affichage

    $note = $get_field('note');
    for ($i=1; $i<=$note; $i++) { echo '<i class="fas fa-star"></i>';}  
    for ($i=1; $i<=5-$note; $i++) { echo '<i class="far fa-star"></i>';}  

    Explication :
    1) on stocke la note dans une variable. La suite ne peut marcher que si la note est une donnée numérique !
    2) on déclenche une première boucle avec les étoiles pleines. tant que le compteur est inférieur ou égal à la note, on sait que c’est une étoile pleine
    3) Sur la seconde boucle, on prend la différence entre la note maxi et la note : on sait que ça correspond au nombre d’étoile vide. Ici le 5 de la note maxi est notée en dur, ça pourrait aussi être une variable.

    Imaginez que vous passer la note sur 20 ! vous allez quand même pas faire 20 if ?

    Exemple : 4/5
    la première boucle verra 4 itérations. A la 5eme, le compteur de boucle (5) est plus grand que la note (4) et donc la boucle s’arrête
    5-4 = 1 -> on aura donc une boucle de la seconde itération

    • Cette réponse a été modifiée le il y a 6 months et 1 week par  CAMEO172.
    • Cette réponse a été modifiée le il y a 6 months et 1 week par  CAMEO172.
    • Cette réponse a été modifiée le il y a 6 months et 1 week par  CAMEO172.
    #2150172
    Reggio
    Participant
    Initié WordPress
    8 contributions

    Merci CAMEO172 pour ce retour exhaustif !

    Effectivement je reconnais que ça manque de beauté et que c’est pas très évolutif. J’en suis au stade où j’essaie d’afficher ce que je souhaite en passant uniquement par le code, j’attaque pas encore la déco 😉

    Sur ton petit bout de code il manquait juste le (int)

    <?php $note = (int) get_field('note');

    Pour les commentaires, j’ai trouvé comment les afficher tous, je dois juste encore réussir à afficher seulement ceux associés au post. Je continue de regarder !

    <?php $comments = get_comments('status=approve&number=5'); ?>
    <ul id="recent_comments">
    <?php foreach ($comments as $comment) { ?>
    <li><p><strong><?php
            $title = get_the_title($comment->comment_post_ID);
            echo get_avatar( $comment, '45' );
    echo strip_tags($comment->comment_author); ?></strong>  a commenté <a href="<?php echo get_permalink($comment->comment_post_ID); ?>" rel="external nofollow" title="<?php echo $title; ?>"> <?php echo $title; ?></a>: <?php echo wp_html_excerpt( $comment->comment_content, 45 ); ?> (...)</p></li>
    <?php }  ?>
    </ul>

    #2150184
    CAMEO172
    Participant
    Maître WordPress
    1395 contributions

    tu peux avoir  $post_id en argument, il suffit donc de le préciser

    • Cette réponse a été modifiée le il y a 6 months par  CAMEO172.
    #2150206
    Reggio
    Participant
    Initié WordPress
    8 contributions
    $postid = get_the_ID();
    $comments = get_comments('status=approve&number=5','$postid'); ?>
    <ul id="recent_comments">
    <?php foreach ($comments as $comment) {

    Il doit me manquer un truc tout bête… peut être en argument un truc dans le genre ‘post_id=$postid’ mais c’est pas encore ça non plus

    #2151922
    Reggio
    Participant
    Initié WordPress
    8 contributions

    Up

    #2152067
    CAMEO172
    Participant
    Maître WordPress
    1395 contributions

    Tu ne suis pas vraiment les recommandations du Codex : https://codex.wordpress.org/Function_Reference/get_comments

    Essayes ça (je ne peux pas tester, je n’ai pas de site de test) :

    <?php
    $postid = get_the_ID();
     $args = array(
    	'number' => '5',
    	'post_id' => $postid ,
    	'status' => approve',
    );
    get_comments( $args ); ?>

7 sujets de 1 à 7 (sur un total de 7)
  • Vous devez être connecté pour répondre à ce sujet.