Created
June 26, 2012 06:42
-
-
Save jcobb/2993853 to your computer and use it in GitHub Desktop.
Combine multiple WordPress queries
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// An example of creating two separate WP queries, combining the results, | |
// sorting by date and formatting the results for us in a loop like a regular query. | |
// order the posts by date in descending order (should go in functions.php to keep things tidy) | |
function order_by_date( $a, $b ) | |
{ | |
return strcmp( $b->post_date, $a->post_date ); | |
} | |
// get the posts for the first query | |
$q1_args = array( | |
// args for the first query | |
); | |
$q1_posts = get_posts( $q1_args ); | |
// get the posts for the second query | |
$q2_args = array( | |
// args for the second query | |
); | |
$q2_posts= get_posts( $q2_args ); | |
// Merge the post arrays together, and sort by date using the order_by_date function | |
$final_posts = array_merge( $q1_posts, $q2_posts ); | |
usort( $final_posts, 'order_by_date' ); | |
// Loop over the posts and use setup_postdata to format for template tag usage | |
foreach ( $final_posts as $key => $post ) { | |
setup_postdata( $post ); | |
// Now we can use template tags as if this was in a normal WP loop | |
the_title('<h2>','</h2>'); | |
the_content(); | |
} | |
?> |
You may want to wrap array_merge with array_unique, to ensure no duplicate posts exists. Array_merge will not remove duplicates unless they have the same numeric key. See WP.org forum post: http://wordpress.org/support/topic/multiple-queries-compiling-into-one-loop?replies=5#post-1920638
$final_posts = array_unique( array_merge( $q1_posts, $q2_posts ) );
This won't work without the SORT_REGULAR flag.
array_unique( array_merge( $q1_posts, $q2_posts ), SORT_REGULAR );
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is an extract of my code...Have a look