2017-11-21 1 views
0

Ich benutze eine WP_Query auf einer Seite, um einige Datensätze mit einem benutzerdefinierten Post-Typ und einem bestimmten Meta-Wert abrufen.WordPress WP_Query Schleife unterscheidet sich von tatsächlichen Abfrage

Die Anfrage und die Zählung sehen korrekt aus, aber wenn ich tatsächlich die Datensätze durchblättere, erhalte ich alle Datensätze mit dem benutzerdefinierten Post-Typ, als ob der Meta-Wert nicht angewendet wird Ich würde in der Standardschleife sehen - nicht was ich mit meiner benutzerdefinierten Abfrage bekommen würde.

Hier ist die Abfrage eingerichtet (mit einigen Debug-Informationen) ...

<?php 
    $args= array(
     'post_type' => 'videos', 
     'posts_per_page' => 4, 
     'offset' => 0, 
     'meta_key' => 'custom_field', 
     'meta_value' => '1' 
    ); 
    $videoQuery = new WP_Query($args); 

    echo $videoQuery->request; 

    echo '-->' . $videoQuery->found_posts; 
    ?> 

Die Abfrage von ->request wie erwartet:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID 
FROM wp_posts 
INNER JOIN wp_postmeta 
ON (wp_posts.ID = wp_postmeta.post_id) 
WHERE 1=1 
AND ((wp_postmeta.meta_key = 'custom_field' AND wp_postmeta.meta_value = '1')) 
AND wp_posts.post_type = 'videos' 
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') 
GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 4 

Gefunden Beiträge 1 als zu erwarten:

-> 1

Wenn ich die Abfrage ausführen, bekomme ich die ID, die ich erwarten zu sehen.

Aber wenn ich Schleife die Ergebnisse, die ich eine Tonne Aufzeichnungen Ausgabe erhalten (sie sehen aus wie die Platten, die ich eher in der Standard-Schleife finden würde, als die Aufzeichnungen für meine WP_Query):

<?php if ($videoQuery->have_posts()) : ?> 
    <div> 
    <?php while ($videoQuery->have_posts()) : $videoQuery->the_post(); ?> 
    <article> 
     <?php the_field('custom_thing_video'); ?> 
     <?php the_field('custom_thing_name'); ?> 
     <div class="tax"> 
      <?php echo get_the_term_list($post->ID, 'video'); ?> 
     </div> 
    </article> 
    <?php endwhile; ?> 
    </div> 
    <?php endif; ?> 

Was habe ich verpasst, das gibt mir die richtigen Informationen in der Schleife?

+0

Um zu klären, Sie viele '

' bekommen? Gibt es 'pre_get_posts'-Filter im Spiel? – janh

+0

Hallo @janh - ich bekomme viele dieser Artikel. Ich bin auf einer Seite, auf der die benutzerdefinierten Beitragstypen angezeigt werden, und sieht eher wie die "Standardergebnisse" aus als meine benutzerdefinierten Abfrageergebnisse. – Fenton

+1

Das ist sehr seltsam. Läuft all dies innerhalb der Hauptschleife (z. B. viele Male ausgeführt)? 'get_posts' verwendet intern WP_Query, es sollte also keinen Unterschied machen. – janh

Antwort

0

Nun, das funktioniert - aber scheint gegen die Empfehlungen zu gehen ... Ich würde mich freuen, eine andere Antwort zu akzeptieren, die Dinge mit WP_Query tut. Die Argumente sind identisch ... aber ich benutze get_posts und dann foreach über die Beiträge.

<?php 
    $args= array(
     'post_type' => 'videos', 
     'posts_per_page' => 4, 
     'offset' => 0, 
     'meta_key' => 'custom_field', 
     'meta_value' => '1' 
    ); 
    $videos = get_posts($args); 
    ?> 

    <?php if ($videos) : ?> 
    <div> 
    <?php foreach($videos as $video) { 
     $videoId = $video->ID ?> 
    <article> 
     <?php echo get_field('custom_thing_video', $videoId); ?> 
     <?php echo get_field('custom_thing_name', $videoId); ?> 
     <div class="tax"> 
      <?php echo get_the_term_list($videoId, 'video'); ?> 
     </div> 
    </article> 
    <?php } ?> 
    </div> 
    <?php endif; ?> 
Verwandte Themen