it-swarm.com.de

WP_Query ignoriert post_type in der Kategorieansicht

Ich habe folgende Abfrage, um Beiträge nach meinem benutzerdefinierten Beitragstyp auszuwählen. Dies funktioniert problemlos, wenn Sie sich auf der Startseite befinden (das Snippet ist in der Seitenleiste enthalten). Sobald es auf einer Kategorieseite ausgeführt wird, wird das Attribut post_type ignoriert und Beiträge vom Typ "post" zurückgegeben. Ich denke, das hat mit mehreren Schleifen zu tun, aber ich habe auch versucht, wp_reset_postdata(); und wp_reset_query(); vorher und nachher aufzurufen.

$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

ich bin mir nicht ganz sicher, in welchem ​​Kontext Sie sich gerade befinden. Es gibt eine Reihe möglicher Lösungen.

zuerst müssen Sie sicherstellen, dass Sie wie erwartet auf $post zugreifen. Mit anderen Worten, stellen Sie sicher, dass es nicht von anderen Aktivitäten betroffen ist, während WordPress die Seite erstellt.

ich weiß nicht, ob $post das Objekt enthält, das Sie an diesem Punkt im Fluss erwarten - weil fast alles das überschreiben könnte. Und wenn ich mir Ihren Code ansehe, sehe ich nicht einmal, wo Sie $post für Ihre eigene Verwendung zuweisen.

ich habe bemerkt, dass Sie get_post_thumbnail_id($post->ID) anrufen. Ich glaube, Sie können Ihr Problem mit $customPosts->$post->ID anstelle von $post->ID lösen.

ich halte Tidys Antwort für eine Lösung - abgesehen von dem Vorschlag, $post in $customPost zu ändern.

wirklich, meine Antwort ist allgemeiner, das heißt: stellen Sie sicher, dass Sie keine Variablennamen kreuzen .

unter bestimmten Bedingungen funktioniert Ihr Code möglicherweise, während unter anderen Bedingungen möglicherweise ein Problem auftritt, wenn andere Aktivitäten diese Variable ändern. $post kann von etwas anderem in WordPress geändert werden leicht (offensichtlich).

auf einer Kategorieseite werden die Posts beispielsweise von WordPress generiert und verwenden die globale Variable $post für sich. Nach meinen Erfahrungen würde ich alles wetten, was ich dazu habe, dass es dein Problem ist. Dann bricht plötzlich Ihr Widget mit einer Post-Schleife auf diesen Seiten ...

andere Dinge, die Sie in dieser Situation oder in der Zukunft ausprobieren können (aber sie müssen mit the loop aufgerufen werden:

the_post_thumbnail( array(100, 100) ); in Ihrer Schleife

oder versuchen Sie es mit $thumb = get_the_post_thumbnail( array(100, 100) );

1
aequalsb

Haben Sie versucht, stattdessen get_posts () zu verwenden?

 //#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

Dies wird Ihr Problem lösen, ich hatte das gleiche Problem, als ich dies ausdrückte, hat es perfekt funktioniert.

$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