Kombinieren von Abfragen mit unterschiedlichen Argumenten pro Beitragstyp
2 Antworten
- Stimmen
-
- 2012-11-05
Eine Möglichkeitbesteht darin,die SQL-Abfrage anzupassen,diemit
anpassenposts_clauses
oder anderen solchen Filtern ausgeführt wird.Um sie zufinden,suchen Sienachposts_clauses
in "wp-includes/query.php" & amp;Siehe die Reihe der Filter kurz vor dieser Zeile.Diese zusammen könnenjeden Teil der AbfrageSie können die abgefragten Beiträge auchmanuellin den Objekten 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 );
One way is to customize the SQL query executed using
posts_clauses
or other such filters. To find them search forposts_clauses
in "wp-includes/query.php" & see the series of filters just before this line. These together are capable of customizing any part of the queryAnother thing you can do is manually merge the queried posts in the objects
$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 );
-
Ihre zweite Lösung (ohne SQL) hatesgeschafft!Jetzt habeich die vollständige Kontrolle darüber,wasin diese letzte Abfragegeht,bevorichin die Schleifegehe.Dankefür Ihre Hilfe!Your second solution (without the SQL) did the trick! Now I have complete control over what is going into that final query before going into the loop. Thanks for your help!
- 0
- 2012-11-05
- Andy Merskin
-
Dieersteist schwierig,abereffizienter (in der zweitengibt esnoch 2 Datenbankabfragen).Ich würde sagen,es kommt auf diepersönlichen Vorlieben anThe first one is difficult but more efficient(in second there are still 2 database queries). I would say it comes down to personal preference
- 1
- 2012-11-05
- Mridul Aggarwal
-
Wäre sehrinteressiert aneinem Weg,um dieerste Lösung zuerreichen!Diebenötigten Filter usw. Erfordert dieseine Art "UNION"in der SQLfürjedenpost_type?Would be extremely interested in a way to accomplish the first solution! The filters needed, etc. Does this call for a `UNION` of some sort in the sql for each post_type?
- 0
- 2017-10-27
- Solomon Closson
-
@SolomonClosson Dieser Filter kann helfen - https://codex.wordpress.org/Plugin_API/Filter_Reference/posts_clauses@SolomonClosson this filter can help- https://codex.wordpress.org/Plugin_API/Filter_Reference/posts_clauses
- 0
- 2017-10-30
- Mridul Aggarwal
-
- 2013-10-28
@mridual aggarwal Ihre Antwortist sehr,sehrgut,aber leider kombiniert sienicht wirklich die 2
wp_query
. Es werdennur die Beiträge vonbeidenin Anordnung angezeigt. Ichmeine 5 Beiträge vomersten & amp; 5 von der zweiten,abernicht allein einer sortiert,so habeich diese Lösung & amp;es hatgenau das Zielfürmich selbsterreicht,zumindest<?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();?>
@mridual aggarwal your answer is very very good but unfortuntly it is not really combining the 2
wp_query
it is only shows the posts from both in arrange i mean 5 posts from the first & 5 from the second but not sorted all in one so i have this solution & it exactly achieved the goal for my self at least<?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();?>
Icherstelleeinen Abschnitt aufeiner Site,in derich zwei verschiedene Beitragstypen in einer Schleife zusammenführe und sie dann zufällig anzeige. Das Problemist,dassesmir schwerfällt,die Anzahl der Posts pro Typ zubegrenzen.
Folgendes habeich versucht:
Eine Abfragemit mehreren Beitragstypen kannmit einem Array ausgeführt werden:
... kannjedochnicht aufeine bestimmte Anzahl von Postspro Typbeschränkt werden.
Zusammenführen von zwei Abfrageargument-Arrays,bevor WP_Query darauf ausgeführt wird:
Kein Glück. Waspassiert,ist,dass die letztere Variable
$quotes
$photos
überschreibt undnur die Anführungszeichen anzeigt.Zusammenführen von zwei WP_Query -Objekten durch Typumwandlung:
... und so weiter.
Ich könnte wahrscheinlicheine SQL-Abfrage direktin der Datenbank verwenden,aberich muss in der Lage sein,diesebeiden separaten Beitragstypenfüreine Schleife zu kombinieren,die zufällig angeordnet und aufeine bestimmte Anzahl von Beiträgenbeschränktistpro Typ.
Dankefür Ihre Hilfe!