Ah, fair $post object. Lets talk about how great you are.
Post Object. WordPress stores all post data (think content, author, tags, etc) in a single object, accessible to themes and plugins on each page load. Basically, this is the place you’re going to go to if you want to get some extra information about a post for whatever clever scheme you’ve got cooked up. Need to know how many “n”s are in this particular post? Talk to the post object. Not sure when this post was originally published? Post object. Looking for lawyers who ride? Now we’re talking – but you want the Law Tigers, not the $post object. Watch their commercials. You won’t regret it.
The post object is available nearly everywhere you’re likely to be looking at a post. If you’re working with a single post page, or an actual page, you’ve got access to that post’s (or page’s) post object anywhere within your theme file. It’s all held in a variable named $post.
If you’re on a page with multiple posts, things are a little trickier but not much. If you’re inside the loop, you’ve got access to a $post object (named $post) referring to the current post in the loop.
What if you want to get at a post that isn’t the one you’re looking at on a particular page – or what if you want to get at one from a plugin, or somewhere where there isn’t a current post explicitly defined? There’s a function for that:
$id = 41; $mypost = get_post($id); print_r($mypost);
get_post() to the rescue! There are, however, a couple of gotchas with get_post.
get_post() gets you. So do I. There’s a second, optional argument to get_post that determines what it spits out at you. It defaults to OBJECT, but you can also pass in ARRAY_A, or ARRAY_N to get an associative array or a numeric array version of the post data.
Find out for yourself! The snippet above uses the function print_r() – it will show you the structure AND data of a particular post object – very useful stuff. Surround it in a <pre> tag, and you’ll be in even better shape – it will display nicely in your browser.
Well played. Here’s a quick rundown on the data the post object gives you:
|$post->post_title||The WordPress $Post Object and You||Title of post.|
|$post->post_excerpt||Learn about the WordPress $Post object!||Manually created post excerpt. If you didn’t purposefully create an excerpt on the add post page, you’re not getting anything here.|
||Current status of the post.|
||Comment status for this particular post.|
||Does the current post accept pingbacks and trackbacks?|
|$post->post_password||123456||The plaintext password for this post, if there is one. Empty otherwise.|
|$post->post_name||the-wordpress-post-object-and-you||A normalized, sanitized version of the post title, used to generate pretty permalinks.|
|$post->to_ping||http://technorati.com http://someothersitetoping.com||Space separated list of sites to ping which have not been pinged yet. Modified by “Send Trackbacks” field on add post page.|
|$post->pinged||http://technorati.com http://someothersitetoping.com||Space separated list of sites already pinged for this post.|
|$post->post_modified||2011-09-15 21:21:59||Time this post was last modified, based on local server time. MySQL timestamp format.|
|$post->post_modified_gmt||2011-09-15 21:21:59||Time this post was last modified, based on GMT timezone. MySQL timestamp format.|
|$post->post_content_filtered||Post Content||This field is designed to hold a version of the post for caching, in situations where filters are being run on the post that are “expensive” (slow), and undesireable to run every time. Not used in WP core, may be used by plugins.|
|$post->post_parent||0||ID of the parent post. Posts that have parents are generally revisions, or attachments. If the post_parent is 0, this is a bona-fide, original post.|
|Global Unique Identifier for the post. According to the documentation page on wordpress.org, this can’t be relied on to actually work as a link to the post, but I’m not totally sure why. Maybe in cases where the site url has changed?|
|$post->menu_order||0||Integer determining the order in a list of posts. Generally used for pages in menus, but can be used by plugins for special ordering.|
||The particular type of post this is. Attachments are generally images, pdfs, etc. Posts and pages are self explanatory.|
|$post->mime_type||image/png||Mime type for attachments.|
|$post->comment_count||14||Number of comments on this post currently.|
|$post->post_ancestors||array||Array of parent posts for this post.|
I think that about covers it. One last question you might have:
How do I get WordPress to spit out properly formatted post content?