Time and time again I’ve needed to do something like getting the content for a specific post outside the loop. This usually results in doing get_post( $id ); then grabbing the specific field out of the array. It’s annoying and more work than it should be.
Today I ran across a little gem of a function called get_post_field() that’s been around since version 2.3. It wraps get_post() and sanitizes output all at the same time. The function is simple and at a minimum just needs a field name and post id. The field names correspond to those returned by get_post() and there’s a handy list in that codex article.
Here’s the source of get_post_field() as of WordPress 3.5.1
/**
* Retrieve data from a post field based on Post ID.
*
* Examples of the post field will be, 'post_type', 'post_status', 'post_content',
* etc and based off of the post object property or key names.
*
* The context values are based off of the taxonomy filter functions and
* supported values are found within those functions.
*
* @since 2.3.0
* @uses sanitize_post_field() See for possible $context values.
*
* @param string $field Post field name
* @param id $post Post ID
* @param string $context Optional. How to filter the field. Default is display.
* @return bool|string False on failure or returns the value in post field
*/
function get_post_field( $field, $post, $context = 'display' ) {
$post = get_post( $post );
if ( !$post )
return '';
if ( !isset($post->$field) )
return '';
return sanitize_post_field($field, $post->$field, $post->ID, $context);
}
Comments