WP_Query wird an der benutzerdefinierten Position gesendet

Nehmen wir an, ich habe eine benutzerdefinierte Abfrage basierend auf zwei benutzerdefinierten Post-Typen:

$wp_query = new WP_Query(array( 'post_type' => array('post-type-1', 'post-type-2'), 'post_status' => 'publish', 'posts_per_page' => '3'); 

Was ich will ist, Posts von Post-Typ-2-Post auf der dritten Position in den Ergebnissen auf jeder Seite zu setzen.

Ist es in einer Abfrage mit Filtern oder auf andere Weise möglich?

Solutions Collecting From Web of "WP_Query wird an der benutzerdefinierten Position gesendet"

Paginierung sollte einfach sein. Sie müssen Ihrer Abfrage nur Paginierungsparameter hinzufügen, und die nächsten / vorherigen Posts verlinken mehr oder weniger wie in einem anderen Thread, in dem ich kürzlich gepostet habe .

 $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $my_query = new WP_Query( array( 'showposts'=>10, 'paged' => $paged ) ); // run the loop then, // pagination links ... var_dump(paginate_links( array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?paged=%#%', 'prev_text' => __('« Previous'), 'next_text' => __('Next »'), 'current' => max( 1, get_query_var('paged') ), 'total' => $my_query->max_num_pages ) )); 

Aber … ein Verhältnis von zwei zu eins in jedem Ergebnissatz nicht zu bekommen.

Ich glaube, dass ich dies mit einer benutzerdefinierten SQL-Abfrage (mit einer UNION ) und $wpdb->get_results oder $wpdb->get_col . Allerdings wäre die Paginierung ein wenig schwierig und Sie erhalten WordPress-Post-Objekte auf diese Weise nicht, so dass Sie wahrscheinlich eine zweite Abfrage benötigen, um diese zu erstellen (und Sie benötigen sie fast immer). Das minimale SQL würde ungefähr so ​​aussehen …

(SELECT ID FROM {$wpdb->posts} WHERE post_type='post-type-1' LIMIT a,b) UNION ALL (SELECT ID FROM {$wpdb->posts} WHERE post_type='post-type-2' LIMIT c,d)

Der schwierige Teil ist, die Werte für diese LIMIT richtig zu bekommen.

Im Prinzip, mit den richtigen Filtern – posts_where, posts_fields usw. – sollten Sie in der Lage sein, eine Abfrage so zu ändern, dass sie der oben erwähnten benutzerdefinierten SQL entspricht, aber wiederum ist die Paginierung ein wenig schwierig und die tatsächliche Abfrage, die WP_Query verwendet ist komplizierter, also müssten Sie das beim Aufbau der UNION .

Bei jeder dieser Lösungen kann es notwendig sein, die Ergebnisse zu sortieren, bevor sie erneut ausgegeben werden. Ich müsste die Abfragen einrichten, testen und sehen.

Letztendlich kann ich mich selbst nicht davon überzeugen, dass diese beiden Lösungen besser sind als die einfache und offensichtliche Ausführung von zwei Abfragen. Ich verstehe, dass Sie die Anzahl der Abfragen niedrig halten möchten. Ich auch, aber manchmal sind zwei Abfragen der richtige Zug. Es sei denn, Ihr Server ist stark unterpowered oder Ihre Website ist sehr schlecht auf viele andere Arten gestaltet, zwei Abfragen vs one für diese Seite keinen Unterschied machen.

Damit…

Ist es in einer Abfrage mit Filtern oder auf andere Weise möglich?

Ja, ich denke, es ist möglich, aber Sie müssten Filter verwenden, um die Abfrage radikal zu ändern, und ich denke nicht, dass es die Zeit für die Entwicklung der Lösung wert ist und ich denke nicht, dass es sich lohnt, sie zu speichern Zeit, die Sie vielleicht oder nicht bekommen können.