Kombinieren von Abfragen mit unterschiedlichen Argumenten pro Post-Typ

Ich baue einen Abschnitt auf einer Website, wo ich zwei verschiedene Post-Typen in einer Schleife zusammenfasse und sie dann nach dem Zufallsprinzip anzeigen möchte. Das Problem ist, dass es mir schwer fällt, die Anzahl der Beiträge pro Typ zu begrenzen.

Hier ist, was ich versucht habe:

  • Eine Abfrage mit mehreren Post-Typen kann mit einem Array erreicht werden:

    $args = array( 'post_type' => array( 'photos', 'quotes' ), ... 

    … kann aber nicht auf eine bestimmte Anzahl von Posts pro Typ beschränkt werden.

  • Vor dem Ausführen von WP_Query zwei Abfrageargumentarrays zusammenführen:

     $photos = array( 'post_type' => 'photos', 'posts_per_page' => 15, 'orderby' => 'rand' ); $quotes = array( 'post_type' => 'quotes', 'posts_per_page' => 5, 'orderby' => 'rand' ); $args = $photos + $quotes; // Also tried array_merge( $photos, $quotes ); 

    Kein Glück dabei. Was passiert, ist, dass die letztere Variable $quotes $photos überschreibt und nur die Anführungszeichen anzeigt.

  • Zusammenführen zweier WP_Query- Objekte durch Typcasting:

     $photos_query = new WP_Query( $photos ); $quotes_query = new WP_Query( $quotes ); $result = (object)array_merge( (array)$photos_query, (array)$quotes_query ); 

… und so weiter.

Ich könnte wahrscheinlich eine SQL-Abfrage direkt in die database verwenden, aber ich muss in der Lage sein, diese beiden separaten Post-Typen für eine Schleife zu kombinieren, zufällig angeordnet UND auf eine bestimmte Anzahl von Beiträgen pro Typ begrenzt.

Danke für Ihre Hilfe!

Solutions Collecting From Web of "Kombinieren von Abfragen mit unterschiedlichen Argumenten pro Post-Typ"

Eine Möglichkeit besteht darin, die SQL-Abfrage anzupassen, die mit posts_clauses oder anderen solchen Filtern ausgeführt wird. Um sie zu finden, suchen posts_clauses nach “posts_clauses” in “wp-includes / query.php” und sehen Sie sich die Filterreihe kurz vor dieser Zeile an. Diese zusammen sind in der Lage, jeden Teil der Abfrage anzupassen

Sie können auch die abgefragten Posts in den Objekten manuell zusammenführen

 $photos_query = new WP_Query( $photos ); $quotes_query = new WP_Query( $quotes ); $result = new WP_Query(); // start putting the contents in the new object $result->posts = array_merge( $photos_query->posts, $quotes_query->posts ); // here you might wanna apply some sort of sorting on $result->posts // we also need to set post count correctly so as to enable the looping $result->post_count = count( $result->posts ); 

@Mriquid Aggarwal Ihre Antwort ist sehr, sehr gut, aber es ist nicht wirklich die Kombination der 2 wp_query es ist nur zeigt die Beiträge von beiden in Arrange ich meine 5 Beiträge von der ersten und 5 von der zweiten aber nicht alle in einem, also habe ich Diese Lösung & es hat genau das Ziel für mich selbst erreicht

 < ?php $term = get_term_by( 'slug', get_query_var( 'tag' ), "post_tag" ); $tagslug = $term->slug; $post_types = get_post_types('','names'); ?> < ?php //first query $blogposts = get_posts(array( 'tag' => $tagslug, //first taxonomy 'post_type' => $post_types, 'post_status' => 'publish', )); //second query $authorposts = get_posts(array( 'bookauthor' => $tagslug, //second taxonomy 'post_type' => $post_types, 'post_status' => 'publish', )); $mergedposts = array_merge( $blogposts, $authorposts ); //combine queries $postids = array(); foreach( $mergedposts as $item ) { $postids[]=$item->ID; //create a new query only of the post ids } $uniqueposts = array_unique($postids); //remove duplicate post ids $posts = get_posts(array( //new query of only the unique post ids on the merged queries from above 'post__in' => $uniqueposts, 'post_type' => $post_types, 'post_status' => 'publish', )); foreach( $posts as $post ) : setup_postdata($post); ?> // posts layout < ?php endforeach; ?> < ?php wp_reset_postdata();?>