J'ai un type de message personnalisé 'événement', un champ méta personnalisé 'date_événement' et une taxonomie personnalisée 'lieux'.
Je veux interroger $ wpdb pour récupérer des posts de cette façon
J'essaie avec les paramètres de requête suivants (je peux obtenir la valeur de $ location - ID ou slug - correctement et passer à cette requête):
SELECT $wpdb->posts.*
LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id)
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
FROM $wpdb->posts, $wpdb->postmeta
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
AND $wpdb->terms.term_id = $location
AND $wpdb->term_taxonomy.taxonomy = 'locations'
AND $wpdb->posts.ID = $wpdb->postmeta.post_id
AND $wpdb->posts.post_type = 'event'
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->postmeta.meta_key = 'event_date'
AND $wpdb->postmeta.meta_value > NOW()
ORDER BY $wpdb->postmeta.meta_value ASC
LIMIT $numberofposts
la requête ne fonctionne pas; si je supprime la partie JOIN et la partie taxonomie, cela fonctionnera en ordonnant tous les résultats en comparant la méta 'event_date' avec la date NOW ().
Je suppose que je me trompe dans la partie taxonomie ...
Comme conseillé, j'ai essayé de faire une requête WP_Query plutôt qu'une requête $ wpdb:
$args = array(
'post_type' => 'event',
'tax_query' => array(
array(
'taxonomy' => 'locations',
'field' => 'id',
'terms' => $location // location term id
)
),
'meta_key' => 'event_date', // this meta field stores event date in yymmdd format
'meta_value' => $today, // this would be today's date in yymmdd format
'meta_compare' => '>=',
'posts_per_page' => $numberofposts, // this variable stores the number of posts I want to get
'orderby'=> 'meta_value_num'
);
Cependant, dans ce dernier cas, la requête renverra TOUTES les publications sous le type spécifique post_type, indépendamment de toute autre spécification dans $ args, y compris l'ordre de tri.
J'ai essayé d'utiliser meta_query au lieu de meta_key mais le résultat ne change pas
Vous avez une faute de frappe dans orderby
, et meta_value_num
n'est utilisé que comme valeur orderby
, essayez ceci:
$args = array(
'post_type' => 'event',
'tax_query' => array(
array(
'taxonomy' => 'locations',
'field' => 'id',
'terms' => $location // location term id
)
),
'meta_key' => 'event_date', // this meta field stores event date in yymmdd format
'meta_value' => $today, // this would be today's date in yymmdd format
'meta_compare' => '>=',
'posts_per_page' => $numberofposts, // this variable stores the number of posts I want to get
'orderby'=> 'meta_value_num'
);