[Résolu] Comment insérer wp_get_post_terms dans une query? (Créer un compte)

  • WordPress :4.6.1
  • Statut : résolu
5 sujets de 1 à 5 (sur un total de 5)
  • Auteur
    Messages
  • #1572522
    Mooks
    Participant
    Padawan WordPress
    87 contributions

    Bonjour,

    Ma configuration WP actuelle

    • Version de PHP/MySQL : 7.0.7
    • Thème utilisé : Custom
    • Extensions en place : Plusieurs
    • Nom de l’hébergeur : Infomaniak
    • Adresse du site : https://www.les-alternatives.com

    Bonjour,

    Mon site étant dédié aux alternatives du Web, j’ai ainsi du créer plusieurs queries afin de lister les posts ayant le même CPT et les mêmes termes d’une taxonomie donnée. Le problème est qu’en l’état actuel, j’envisageais la solution facile mais pas optimisée, à savoir l’ajout de custom fields dans mes posts afin de rentrer manuellement les CPT et les termes nécessaire à la query dans chaque post.

    Je suis persuadé que je peux me passer de ça et rendre ma query « autonome », vu que j’ai déjà intégré avec succès get_post_type($post->name) afin que la query recherche les post du même type celui que l’on est en train de lire.

    La dernière chose que j’aimerais donc réaliser, dans la même logique, c’est intégrer wp_get_post_terms pour que la query prennent en compte les termes d’une taxonomie donnée du post en cours. Mais vu que cette fonction retourne un array, je ne sais pas trop comment la traiter ensuite pour la rendre exploitable dans la query (implode, explode?)

    Le code qui va suivre n’intègre pas wp_get_post_terms. Le but du jeu serait de l’intégrer en remplacement de la variable $terms (ligne 1), afin qu’il génère qqc d’exploitable par la query (donc de la forme : terme #1, terme #2, terme #3).

    $terms = 'media-center,backup';

    $args = array(

    'post_type' => get_post_type($post->name),
    'posts_per_page' => 9,
    'post_status' => 'publish',
    'orderby' => 'gdrts',
    'tax_query' => array(
    array(
    'taxonomy' => 'categorie-de-logiciel',
    'field' => 'slug',
    'terms' => explode(',', $terms),
    ),

    array(
    'taxonomy' => 'custom-type',
    'field' => 'slug',
    'terms' => 'fiche',
    ),
    ),
    );

    // The Query
    $the_query = new WP_Query( $args );

    // The Loop
    if ( $the_query->have_posts() ) {

    echo'<div class="container-news animated zoomInUp delay-750ms duration-1000ms">';

    while ( $the_query->have_posts() ) : $the_query->the_post();

    if ( has_post_thumbnail()) {

    $post = get_post($ID);
    $item = gdrts_get_rating_item_by_post($post);
    $votes = $item->meta['like-this_votes'];

    echo '<a class="clickable-container" href="' ,the_permalink(), '" title="' ,the_title_attribute(), '">

    <div class="single-news">' ,the_post_thumbnail( 'medium' ),
    '</div>

    <div class="overlay">
    <div class="overlay-content">' ,the_excerpt(), '</div>
    </div>

    <div class="clickable-container info-container">
    <h3 class="responsive-title">' ,the_title(), '</h3>
    <div class="responsive-date"> Publié le ' ,the_time('j F Y'), ' à ' ,the_time('g:i'), '</div>
    <div>', $votes, '</div>
    </div>
    </a>';

    }

    endwhile;

    echo'</div>';
    }

    /* Restore original Post Data */
    wp_reset_postdata();

    }

     

    #1572526
    Willy Bahuaud
    Participant
    Initié WordPress
    9 contributions

    Je dirais que tu peux récupérer les termes courants de cette façon :

    <?php
    $terms = wp_get_post_terms( get_queried_object_id(), 'categorie-de-logiciel', array( 'fields' => 'slugs' ) );
    récupérer les termes courants

    Puis après les traiter dans la requête comme tu le fais, en précisant que l’opérateur interne de la tax_query est ‘IN’ 🙂
    Tu peux aussi te passer du explode, vu que tu obtiens directement un tableau PHP (ou bien faire un $terms = implode( ',', $terms ) si tu préfères).

    Ça ferait l’affaire ?

    #1572536
    Mooks
    Participant
    Padawan WordPress
    87 contributions

    Merci pour ta réponse, mais c’est infructueux en l’état.

    Déjà, pour récupérer les termes du post en cours, pourquoi ne pas simplement utiliser le post_ID plutôt que get_queried_object_id:

    wp_get_post_terms($post->ID,'categorie-de-logiciel',array( 'fields' => 'slugs' ));

    Mais même en dépit de ça, la query ne me retourne rien. Que ce soit avec post_ID ou get_queried_object_id :

    $terms = wp_get_post_terms($post->ID,'categorie-de-logiciel',array( 'fields' => 'slugs' ));

    $args = array(

    'post_type' => get_post_type($post->name),
    'posts_per_page' => 9,
    'post_status' => 'publish',
    'orderby' => 'gdrts',
    'tax_query' => array(
    array(
    'taxonomy' => 'categorie-de-logiciel',
    'field' => 'slug',
    'terms' => implode(',', $terms),
    'operator' => 'IN',
    ),

    array(
    'taxonomy' => 'custom-type',
    'field' => 'slug',
    'terms' => 'fiche',
    'operator' => 'IN',
    ),
    ),
    );

    // The Query
    $the_query = new WP_Query( $args );

    // The Loop
    if ( $the_query->have_posts() ) {

    echo'<div class="container-news animated zoomInUp delay-750ms duration-1000ms">';

    while ( $the_query->have_posts() ) : $the_query->the_post();

    if ( has_post_thumbnail()) {

    $post = get_post($ID);
    $item = gdrts_get_rating_item_by_post($post);
    $votes = $item->meta['like-this_votes'];

    echo '<a class="clickable-container" href="' ,the_permalink(), '" title="' ,the_title_attribute(), '">

    <div class="single-news">' ,the_post_thumbnail( 'medium' ),
    '</div>

    <div class="overlay">
    <div class="overlay-content">' ,the_excerpt(), '</div>
    </div>

    <div class="clickable-container info-container">
    <h3 class="responsive-title">' ,the_title(), '</h3>
    <div class="responsive-date"> Publié le ' ,the_time('j F Y'), ' à ' ,the_time('g:i'), '</div>
    <div>', $votes, '</div>
    </div>
    </a>';

    }

    endwhile;

    echo'</div>';
    }

    /* Restore original Post Data */
    wp_reset_postdata();

    }

    #1572549
    Mooks
    Participant
    Padawan WordPress
    87 contributions

    EDIT : La query en elle même fonctionne, il semblerait que le problème survienne lorsque les termes de la taxonomie sont hiérarchique.

    #1572576
    Mooks
    Participant
    Padawan WordPress
    87 contributions

    Problème résolu : il suffisait d’utiliser la variable $terms sans implode.

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