Die Kombination von zwei WordPress-Abfragen mit Paginierung funktioniert nicht

Ich versuche, zwei WordPress-Abfragen zu kombinieren, aber es funktioniert nicht so gut wie Paginierung.

Ich möchte die heutigen Posts sortiert nach Kommentarzählen anzeigen und danach alle Posts (mit Ausnahme des heutigen Posts) sortiert nach Kommentaranzahl anzeigen.

Ich glaube, das sind die beiden Abfragen, um die Aufgabe separat zu erledigen. Aber wie kann ich diese so kombinieren, dass neue Query-Listen die heutigen Posts zuerst sortiert nach Kommentarzählung und dann den Rest der Posts sortiert nach Kommentaranzahl. Und auch mit Paginierung.

 'post', 'orderby' => 'comment_count', 'ignore_sticky_posts' => 1, 'date_query' => array( array( 'year' => $today['year'], 'month' => $today['mon'], 'day' => $today['mday'], ), ), 'paged' => $paged, ); $query1 = new WP_Query( $args1 ); $args2 = array( 'post_type' => 'post', 'orderby' => 'comment_count', 'ignore_sticky_posts' => 1, 'paged' => $paged, ); $query2 = new WP_Query( $args2 ); ?> 

BEARBEITEN: 1 //

@birgire, ich habe die von dir vorgeschlagene Methode ausprobiert. Aber habe diesen mysql Fehler.

 WordPress database error: [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-5,5' at line 1] SELECT SQL_CALC_FOUND_ROWS * FROM ( (SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND ( ( post_date > '2014-08-27 00:00:00' ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') ORDER BY wp_posts.comment_count DESC LIMIT 1000) UNION ALL (SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND ( ( post_date < '2014-08-27 00:00:00' ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') ORDER BY wp_posts.comment_count DESC LIMIT 1000 ) ) as combined LIMIT -5,5 

Solutions Collecting From Web of "Die Kombination von zwei WordPress-Abfragen mit Paginierung funktioniert nicht"

Sie können Folgendes versuchen (ungetestet):

Richten Sie die Abfrageargumente # 1 ein: (Heute)

  //----------------- // Query part #1: //----------------- $args1 = array( 'post_type' => 'post', 'orderby' => 'comment_count', 'ignore_sticky_posts' => 1, 'date_query' => array( array( 'after' => date('Ym-d'), ), 'inclusive' => true, ) ); 

Richten Sie die Abfrageargumente # 2 ein: (! Today)

  //----------------- // Query part #2: //----------------- $args2 = array( 'post_type' => 'post', 'orderby' => 'comment_count', 'ignore_sticky_posts' => 1, 'date_query' => array( array( 'before' => date('Ym-d'), ), 'inclusive' => false, ) ); 

Dann kombinieren wir es:

 //--------------------------- // Combined queries #1 + #2: //--------------------------- $args = array( 'posts_per_page' => 5, 'paged' => ( $paged = get_query_var( 'paged' ) ) ? $paged : 1 , 'sublimit' => 1000, 'args' => array( $args1, $args2 ), ); $results = new WP_Combine_Queries( $args ); 

Hier verwenden wir die experimentelle WP_Combine_Queries class.

Derzeit wird UNION , Sie können jedoch stattdessen UNION ALL verwenden.

GitHub:

Das Plugin ist jetzt auf GitHub verfügbar.