WP_Query gibt eine zufällige Anzahl von Posts zurück

Es gibt eine Datei mit dem Namen inform.php in index.php , single.php und single-news.php mit folgender Abfrage:

  '12837', 'posts_per_page' => '22'); $query1 = new WP_Query($arr); while($query1->have_posts()) : $query1->the_post(); ?> 
  • <a href="https://wordpress.stackexchange.com/questions/139105/wp-query-returns-random-number-of-posts/" title=""> 'right icon-40')); ?><?php /**/ ?>
  • Es liefert genau 22 Beiträge in index.php und single.php aber in single-news.php es nur einen Beitrag zurück.

    Es gibt keinen Unterschied zwischen single.php und singel-news.php Ausnahme des Stylings und der Anzeige einiger benutzerdefinierter Felder.

    Ich habe auch nach wp_reset_postdata(); nach jeder benutzerdefinierten Abfrage, die ich geschrieben habe, berücksichtigt zu werden, aber doch gibt es dieses seltsame Ergebnis.

    Einzelne Nachrichtenvorlagen werden mit dieser function geladen:

     function custom_cat_single_file($single_template) { global $post; if ( in_category( 'news' ) && !in_category('mac-game')) { $single_template = dirname( __FILE__ ) . '/single-news.php'; } return $single_template; } add_filter( "single_template", "custom_cat_single_file" ); 

    Update # 1

    var_dump($query1->request);

     string(476) "SELECT SQL_CALC_FOUND_ROWS wp_posts.id 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 (12837) ) AND wp_posts.post_type = 'post' AND ( wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private' ) AND wp_posts.post_date >= '2014:03:21 00:00:00' AND wp_posts.post_date < '2015:03:21 00:00:00' GROUP BY wp_posts.id ORDER BY wp_posts.post_date DESC LIMIT 0, 22" 

    Ich habe einen pre_get_post Hook, aber ich glaube nicht, dass etwas davon betroffen ist.

     function post_in_page( $query ) { // not an admin page and is the main query if (!is_admin() && $query->is_main_query()){ if(is_category()){ $current = get_query_var('cat'); $cat = get_category ($current); if($cat->slug != 'news') $query->set('posts_per_page', 25); } } } add_action( 'pre_get_posts', 'post_in_page'); 

    Update # 2

    Wie @s_ha_dum über Daten bemerkt habe, habe ich keine hooked function gefunden, aber ich habe mich nicht in allen Plugins Dateien vertieft.

    Also habe ich die WHERE Klausel der Abfrage geändert:

     function so__weird() { function filter_where( $where = '' ) { $where = preg_replace("/ AND\s+wp_posts\.post_date.*?wp_posts\.post_date.+[^'].*?'/s", '', $where); return $where; } add_filter( 'posts_where', 'filter_where' ); } 

    und rufen so__weird() an dem benötigten Ort an.

    Solutions Collecting From Web of "WP_Query gibt eine zufällige Anzahl von Posts zurück"

    Es gibt keinen Grund, dass sich Abfrage auf einer einzelnen Post-Seite anders als auf jeder anderen Seite verhalten sollte. Das heißt, im Code ist kein Grund angegeben. Das einzige, was mir pre_get_posts wäre, dass ein Filter interferiert – vielleicht ein schlecht geschriebener Filter auf pre_get_posts oder post_limits .

    Sie sollten in der Lage sein, das SQL zu überprüfen, das aus dieser Abfrage mit var_dump($query1->request); und wenn es mit etwas anderem als LIMIT 0, 22 endet LIMIT 0, 22 hast du etwas dazwischen.

    Basierend auf zusätzlichen Informationen in der Frage:

    Der pre_get_posts Callback, den Sie gepostet haben, sollte nicht, wenn ich falsch lese, bewirken, dass die Abfrage einen einzigen Post pre_get_posts . Es sollte mehr als 22 wenn überhaupt zurückgeben. In dieser Abfrage gibt es jedoch Datumsbedingungen …

      AND wp_posts.post_date >= '2014:03:21 00:00:00' AND wp_posts.post_date < '2015:03:21 00:00:00' 

    ... die nicht von Ihren expliziten Abfrageargumenten berücksichtigt werden. Irgendwo muss ein anderer Filter sein.