query private custom post type

If you are setting the CPT to private, that is telling wordpress not to create the dynamic page for that post type. This includes using the single-CPT.php file.

If you want to have “?post_type=” pages, you’ll need to set the cpt to publicly_queryable=true, or public=true (which includes publicly_queryable).

Why do you want it private (aka public = false)?

If you are looking to just have the posts in the back do this:

publicly_queryable=false;  //disables creation of single pages.
has_archive=false;  //disables creation of archive page.
public=true;  //if this is set to false it will hide them in the backed too.

If you keep it this way and would like to show the posts on the front end, they would still be available by using a wp_query. I do this instances where I don’t want people to be able to see a single version of my CPTs or if I never have the intention of pulling ALL my posts at the same time. This is also great because they won’t get picked up by google or other indexing machines.