functionwpse71471_get_post_ids($cat, $taxonomy ='category'){returnget_posts(array('numberposts'=>-1,// get all posts.'tax_query'=> array( array('taxonomy'=> $taxonomy,'field'=>'id','terms'=> is_array($cat)? $cat : array($cat), ), ),'fields'=>'ids',// only get post IDs. ));}
Sorted by: Highest score (default) Date modified (newest first) Date created (oldest first) 16
The thing to remember about get_posts is that is uses a WP_Query object internally. get_posts source:
<?php/** * Retrieve list of latest posts or posts matching criteria. * * The defaults are as follows: * 'numberposts' - Default is 5. Total number of posts to retrieve. * 'offset' - Default is 0. See {@link WP_Query::query()} for more. * 'category' - What category to pull the posts from. * 'orderby' - Default is 'post_date'. How to order the posts. * 'order' - Default is 'DESC'. The order to retrieve the posts. * 'include' - See {@link WP_Query::query()} for more. * 'exclude' - See {@link WP_Query::query()} for more. * 'meta_key' - See {@link WP_Query::query()} for more. * 'meta_value' - See {@link WP_Query::query()} for more. * 'post_type' - Default is 'post'. Can be 'page', or 'attachment' to name a few. * 'post_parent' - The parent of the post or post type. * 'post_status' - Default is 'publish'. Post status to retrieve. * * @since 1.2.0 * @uses $wpdb * @uses WP_Query::query() See for more default arguments and information. * @link http://codex.wordpress.org/Template_Tags/get_posts * * @paramarray $args Optional. Overrides defaults. * @returnarray List of posts. */functionget_posts($args =null) { $defaults =array('numberposts'=>5,'offset'=>0,'category'=>0,'orderby'=>'post_date','order'=>'DESC','include'=>array(),'exclude'=>array(),'meta_key'=>'','meta_value'=>'','post_type'=>'post','suppress_filters'=>true ); $r =wp_parse_args( $args, $defaults );if ( empty( $r['post_status'] ) ) $r['post_status'] = ( 'attachment'== $r['post_type'] ) ?'inherit':'publish';if ( !empty($r['numberposts'])&&empty($r['posts_per_page']) ) $r['posts_per_page'] = $r['numberposts'];if ( !empty($r['category']) ) $r['cat'] = $r['category'];if ( !empty($r['include']) ) { $incposts =wp_parse_id_list( $r['include'] ); $r['posts_per_page'] =count($incposts); // only the number of posts included $r['post__in'] = $incposts; } elseif ( !empty($r['exclude']) ) $r['post__not_in'] =wp_parse_id_list( $r['exclude'] ); $r['ignore_sticky_posts'] =true; $r['no_found_rows'] =true; $get_posts =newWP_Query;return $get_posts->query($r);}
Which, means, of course, that you can use any of the same arguments that WP_Query accepts. This includes parameters relating to fields.
To get an array of just IDs, you'd need to do something like this:
<?php$post_ids =get_posts(array('numberposts'=>-1,// get all posts.'tax_query'=> array( array('taxonomy'=>'category','field'=>'id','terms'=>5, ), ),'fields'=>'ids',// Only get post IDs));
Or you can wrap it up in a function for more flexibility.
<?phpfunctionwpse71471_get_post_ids($cat, $taxonomy='category'){returnget_posts(array('numberposts'=>-1,// get all posts.'tax_query'=> array( array('taxonomy'=> $taxonomy,'field'=>'id','terms'=> is_array($cat)? $cat : array($cat), ), ),'fields'=>'ids',// only get post IDs. ));}