web-dev-qa-db-fra.com

WP_Query ignore post_type dans la vue de la catégorie

J'ai la requête suivante pour sélectionner les publications par mon type de publication personnalisé. Cela fonctionne bien tout en étant sur la page d'accueil (l'extrait est inclus dans la barre latérale). Dès qu'il est exécuté sur une page de catégorie, l'attribut post_type est ignoré et les publications du type "post" sont renvoyées. Je suppose que cela a à voir avec plusieurs boucles mais j'ai aussi essayé d'appeler wp_reset_postdata(); et wp_reset_query(); avant et après.

$customPosts = new WP_Query( array( 
    'post_type' => 'mycustomtype', 
    'posts_per_page' => 12, 
    'orderby' => 'date', 
    'order' => 'DESC', 
    'post_status' => 'publish'
));

while ( $customPosts->have_posts() ) : $customPosts->the_post(); 
    $thumbnailUrl = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), "thumbnail");
    if ( !empty($thumbnailUrl)) {
      /* echo result */ 
    }   
endwhile;   
5
david

je ne suis pas tout à fait sûr du contexte complet de ce que vous faites ici. Il existe un certain nombre de solutions possibles.

le premier est de vous assurer que vous accédez à $post comme prévu. en d'autres termes, assurez-vous qu'il n'est pas affecté par une autre activité pendant que WordPress construit la page.

je ne sais pas si $post contient l'objet que vous attendez à ce stade du flux - car à peu près tout pourrait écraser cela. et en regardant votre code, je ne vois même pas où vous affectez $post pour votre propre utilisation.

j'ai remarqué que vous appelez get_post_thumbnail_id($post->ID). Donc, je pense que vous pouvez résoudre votre problème en utilisant $customPosts->$post->ID au lieu de $post->ID.

je considère la réponse de Tidy ci-dessus comme une solution - autre que la suggestion de changer $post en $customPost

vraiment, ma réponse est plus générique, à savoir: assurez-vous de ne pas croiser les noms de variable .

dans certaines conditions, votre code peut fonctionner, alors que dans d'autres, il peut y avoir un problème si une autre activité modifie cette variable. $post peut être modifié par quelque chose d'autre dans WordPress facilement (évidemment).

sur une page de catégories, par exemple, les articles seront générés par WordPress et il utilisera la variable globale $post pour lui-même. D'après mes expériences, je parierais tout ce que j'ai sur votre problème. puis soudainement votre widget avec une boucle de publication se brise sur ces pages.

vous pouvez essayer d'autres choses dans cette situation ou dans le futur (mais elles doivent être appelées avec the loop:

the_post_thumbnail( array(100, 100) ); dans votre boucle

ou essayez $thumb = get_the_post_thumbnail( array(100, 100) );

1
aequalsb

Avez-vous essayé d'utiliser get_posts () à la place?

 //#get access to post settings
    global $post;
    //#set parameters for extra loop
    $args = array(
    'post_type' => 'mycustomtype', 
    'posts_per_page' => 12, 
    'orderby' => 'date', 
    'order' => 'DESC', 
    'post_status' => 'publish'
    );
    //#get posts 
    $customPosts = get_posts($args);
    //#loop through them
    foreach($customPosts as $post)
    {
        //#set all the loop functions to use data from this post
        setup_postdata($post);
        //#do what you want with the post
    }
1
Tidy

Cela résoudra votre problème. Je rencontrais le même problème. Lorsque j’exprimais cela, cela fonctionnait parfaitement.

$args = array(
     'post_type' => 'mycustomtype', 
     'posts_per_page' => 12, 
     'orderby' => 'date', 
     'order' => 'DESC', 
     'post_status' => 'publish',
     'tag' => 'mycustomtag',
     'cat' => 'mycustomcategory'
    );              

$the_query = new WP_Query( $args );
if($the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); 
0
Matthew T Rader