Create a gist now

Instantly share code, notes, and snippets.

@bonny /gist:5005579
Last active Dec 14, 2015

What would you like to do?
with_posts() WordPress function example usage
<?php
/**
* Examples for WordPress function with_posts()
*
* The main function is available here:
* https://gist.github.com/bonny/5011943
*
* Author and contact info:
* https//twitter.com/eskapism
*
**/
// Do something with a single post, by ID
with_posts(14824, function(){
echo "<p>Got a single page with title " . get_the_title() . "</p>";
});
// Do something with many posts, by ID, in the order that they are in the string
with_posts("14831,987,1,235", function(){
echo "<p>Got page with title: " . get_the_title() . "</p>";
});
// Do something with posts by slug
// Can be multiple posts, because multiple posts can have the same slug,
// but be in different places in the hierarchy
with_posts("about-us", function() {
echo "<br>Got post with title: " . get_the_title();
});
// Do something with multitple posts, by post slug
with_posts("about-us,our-software,copyrights", function() {
echo "<br>Got post with title: " . get_the_title();
});
// Do something with a post object
$post_id = 14831;
$post_obj = get_post($post_id);
with_posts($post_obj, function(){
echo "<p>" . get_the_title() . "</p>";
});
// Do something with a wp_query-object
$wp_query_obj = new wp_query('post_type=regions&posts_per_page=3&orderby=title&order=asc');
with_posts($wp_query_obj, function(){
echo "<p>" . get_the_title() . "</p>";
});
// Do something with a wp_query-compatible string
$return_val = with_posts('post_type=regions&posts_per_page=5&orderby=title&order=desc', function() {
echo "<p>" . get_the_title() . "</p>";
});
// Do something with the currently requested post
$return_val = with_posts(get_queried_object(), function() {
echo "<p>" . get_the_title() . "</p>";
});
// With posts returns a wp_query object, with some extra information added.
// So you can continue using the generated wp_query.
// See examples below:
// Do something special if we didn't get any posts,
// like show message if query did not return posts
$return_val = with_posts('post_type=i_do_not_exist', function() {
// This code will never be executed, because no post of type "i_do_not_exist" exists
echo "<p>" . get_the_title() . "</p>";
});
if ($return_val->post_count === 0) {
echo "<p>The query did not return any posts.</p>";
}
// With posts also accepts a third argument, if set to TRUE then
// the output is buffered and returned.
// See example below for usage:
// Only print headline if we got any posts
$return_val = with_posts('post_type=post', function() {
echo "<p>" . get_the_title() . "</p>";
}, TRUE);
if ($return_val->post_count === 0) {
echo "<h2>I did NOT retrieve any posts</h2>";
} else {
echo "<h2>I DID retrieve some posts</h2>";
echo "<p>Output:</p>";
echo $return_val->buffered_output;
}
// Only print headline if we got any posts
$return_val = with_posts('post_type=i_do_not_exist', function() {
// This code will never be executed
echo "<p>" . get_the_title() . "</p>";
}, TRUE);
if ($return_val->post_count === 0) {
echo "<h2>I did NOT retrieve any posts</h2>";
} else {
echo "<h2>I DID retrieve some posts</h2>";
echo "<p>Output:</p>";
echo $return_val->buffered_output;
}
// with posts passed two arguments to the function used as the second argument:
// $post and $arr_info
// $post = the current post that is beeing looped,
// so you quickly have access to things like $post->post_name, or whatever you need
// $arr_info = array with nice to have info, like post_count, current_post, post, and the full wp_query-query,
// so you have access to everything you would have access to in a regular wp_query-loop
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment