web-dev-qa-db-fra.com

post_type est ignoré par WP_Query lorsque l'argument 'tag' est inclus

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

3
m477

Je viens d'avoir le même problème et le problème était l'option exclude_from_searchpost_type. Il semble que WordPress ait un bogue (je vais simplement le signaler), lorsque vous avez exclude_from_searchfalse, les articles ne s'affichent pas sur les pages d'impôt

1
Tomáš Kapler

Il semble que votre thème modifie la requête après l'ajout de votre requête. Probablement le filtre pre_get_posts.

0
kaiser

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' )

0
Chris_O

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(); 
0
Matthew T Rader