J'ai créé une fonction pour appeler un modèle de page dans lequel se trouve la requête suivante:
$custom_news = new WP_Query(array(
'post_type' => array('post', 'resource', 'job'),
'posts_per_page' => 5,
'tag' => 'justice',
'orderby' => 'post_date',
'order' => 'DESC',
)
);
Le problème est que les CPT "ressource" et "travail" ne sont pas inclus dans la requête, même s'ils ont été enregistrés avec 'taxonomies' => 'post_tag'
. Voici le SQL généré:
[request] => SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (13) ) AND wp_posts.post_type IN (‘post’, ‘portfolio’) AND (wp_posts.post_status = ‘publish’ OR wp_posts.post_author = 1 AND wp_posts.post_status = ‘private’) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 5
Les seuls CPT inclus dans la requête sont 'post' et 'portfolio' (qui est un CPT fourni avec le thème que j'utilise).
Cependant, si je supprime l'argument 'tag' => 'justice'
, l'argument de type post est "vu" par la requête et le code SQL suivant est généré:
[request] => SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_type IN (‘post’, ‘resource’, ‘job’) AND (wp_posts.post_status = ‘publish’ OR wp_posts.post_author = 1 AND wp_posts.post_status = ‘private’) ORDER BY wp_posts.post_date DESC LIMIT 0, 5
Je devrais également mentionner que je l’ai essayé avec les arguments 'tag__in'
et tax_query
sans succès.
Quelqu'un pourrait-il expliquer pourquoi cela pourrait être? Il se peut que je manque quelque chose de très fondamental, et si oui, pardonnez-moi.
Merci, mat
Je viens d'avoir le même problème et le problème était l'option exclude_from_search
post_type
. Il semble que WordPress ait un bogue (je vais simplement le signaler), lorsque vous avez exclude_from_search
false
, les articles ne s'affichent pas sur les pages d'impôt
Il semble que votre thème modifie la requête après l'ajout de votre requête. Probablement le filtre pre_get_posts
.
Le problème est que les CPT "ressource" et "travail" ne sont pas inclus dans la requête, même s'ils ont été enregistrés avec
'taxonomies' => 'post_tag'
.
L'argument taxonomies de register_post_type prend un tableau et non une chaîne.
taxonomies (array) (facultatif) Un tableau de taxonomies enregistrées, telles que category ou post_tag, qui sera utilisé avec ce type de publication. Cela peut être utilisé au lieu d'appeler register_taxonomy_for_object_type () directement. Les taxonomies personnalisées doivent encore être enregistrées auprès de register_taxonomy (). Défaut: pas de taxonomies
Il devrait être 'taxonomies' => array( 'post_tag' )
Cela résoudra votre problème, j'avais le même problème, lorsque j'ai tapé cela, cela fonctionnait parfaitement.
$args = array(
'post_type' => array('post', 'resource', 'job'),
'posts_per_page' => 5,
'tag' => 'justice',
'orderby' => 'post_date',
'order' => 'DESC',
);
$the_query = new WP_Query( $args );
if($the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();