Why Does get_posts() Return an Empty Set?

I’m writing a custom plugin that is initialized at init. This plugin is trying to query for some custom post types already stored in the DB.

Here’s my code:

$args = array()
$myposts = get_posts( $args );  
print_r($myposts);

No matter what arguments I pass into the $args array I don’t get anything. For example:

$args = array( 'post_type' => 'page' );

Now, to my confusion if I use the exact same arguments with get_pages() I get a result.

Maybe this has something to do with when WP Query is initialized?

Solutions Collecting From Web of "Why Does get_posts() Return an Empty Set?"

It seems that is was a simple problem. get_posts() has various default settings, one of which is that the post_status is set to public and my custom post type which doesn’t use post_status used the default value, draft.

To fix this you can either query by post status (see the code below) or change the data in the DB.

$args = array(
    'post_status' => 'draft',
    'post_type'   => 'your_custom_post_type'
);

get_posts() is more to be used within The Loop.

but to get that working outside the loop, try putting global $post; first at the top…

global $post;
$args = array( 'post_type' => 'page' );
$myposts = get_posts($args);