WordPress - Programmatically Getting the Latest Post in a Category

I’ve seen a lot of solutions for this online but I didn’t really like any of them and they didn’t seem to fit my needs. Here is a function I wrote that you can add to your functions.php in your custom theme which will retreive the latest post in a category when you supply the category id:

<?php
/**
 * Returns the latest post in a category.
 *
 *
 * Quick explanation:
 * ok, the results from WP_Query are stored in an array of WP_Post objects.
 * the "array keys" in WP_Post are actually just attributes, as in:
 * $latest_post->post_content, etc...
 *
 * @param  [int] $category_id category id by number, use get_cat_ID() with the full category name i.e., get_get_ID('My Example Category') to specify category names.
 * @return [WP_Post] object containing post data
 */
function latest_post_in_category($category_id)
{
    $latest_posts = get_posts(array(
        'posts_per_page' => 1,
        'category' => $category_id
    ));

    $return_post = array();
    if (count($latest_posts) > 0) {
        $latest_post = $latest_posts[0];
        return $latest_post;
    }

    return null;
}
?>

The function returns null when no post is found. So you can safely check for nulls.

Here is an example of the function in action. I created another function to pull the latest post from a specific category, by its name:

<?php
function latest_on_demand()
{
    return latest_post_in_category(get_cat_ID('On Demand'));
}
?>

And here’s an example of that function used inside a template:

<?php $latest_post = latest_on_demand() ?>
<?php if (!is_null($latest_post)): ?>
    <?php echo $latest_post->post_content ?>
<?php endif ?>

To get the other attributes of the WP_Post object you can always var_dump($latest_post)

Have fun!

blog comments powered by Disqus