Combinaison de requêtes avec différents arguments par type de message
2 réponses
- votes
-
- 2012-11-05
Unefaçonest depersonnaliser la requête SQLexécutée à l'aide de
posts_clauses
ou d'autresfiltres de cetype.Pour lestrouver,recherchezposts_clauses
dans "wp-includes/query.php" & amp;voir la série defiltresjuste avant cette ligne.Ensemble,ces éléments sont capables depersonnalisern'importe quellepartie de la requêteUne autre chose que vouspouvezfaireest defusionnermanuellement lesmessagesinterrogés dans les objets
$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 );
-
Votre deuxième solution (sans le SQL) afait l'affaire!Maintenant,j'ai un contrôletotal sur ce qui sepasse dans cette requêtefinale avant deme lancer dans laboucle.Merci de votre aide!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
-
Lapremièreest difficilemaisplusefficace (dans la secondeil y aencore 2 requêtes debase de données).Je dirais que c'est une question depréférencepersonnelleThe 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
-
Seraitextrêmementintéressépar unmoyen d'accomplir lapremière solution!Lesfiltresnécessaires,etc.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 cefiltrepeut aider - 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 votre réponseesttrèstrèsbonnemaismalheureusement,ellene combinepas vraiment les 2
wp_query
,ellene montre que lesmessages des deux dans organiserje veux dire 5messages dupremier & amp; 5 de la secondemaispastriéstouten un doncj'ai cette solution & amp;il aexactement atteint l'objectifpourmoi aumoins<?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();?>
Je construis une section sur un site oùje fusionne deuxtypes d'articles différents en une seuleboucle,puisje les affiche demanière aléatoire. Leproblèmeest quej'ai dumal àtrouver unmoyen de limiter lenombre demessages par type.
Voici ce quej'aiessayé:
Une requête avecplusieurstypes depublicationpeut être réalisée avec untableau:
...maisne peutpas se limiter à un certainnombre demessagespartype.
Fusion de deuxtableaux d'arguments de requête avant d'exécuter WP_Query dessus:
Pas de chance là-dessus. Ce qui sepasse,c'est que la dernière variable
$quotes
écrase$photos
et n'affiche que les citations.Fusion de deux objets WP_Query ensemble via letypage:
...et ainsi de suite.
Jepourraisprobablement utiliser une requête SQL directement dans labase de données,maisj'ai besoin depouvoir combiner ces deuxtypes demessages séparéspour uneboucle,organisée demanière aléatoire ET limitée à un certainnombre demessagespartype.
Mercipour votre aide!