- WordPress :4.6.1
- Statut : résolu
- Ce sujet contient 4 réponses, 2 participants et a été mis à jour pour la dernière fois par
Mooks, le il y a 8 années et 4 mois.
-
AuteurMessages
-
11 octobre 2016 à 9 h 02 min #1572522
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();
}11 octobre 2016 à 9 h 20 min #1572526Je 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 courantsPuis 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 ?
11 octobre 2016 à 10 h 05 min #1572536Merci 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();
}11 octobre 2016 à 10 h 48 min #1572549EDIT : La query en elle même fonctionne, il semblerait que le problème survienne lorsque les termes de la taxonomie sont hiérarchique.
11 octobre 2016 à 12 h 40 min #1572576Problème résolu : il suffisait d’utiliser la variable $terms sans implode.
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.