How do I create a page template to display a custom post type?

I am wanting to create a page template file to display posts from a custom content type. I was working with this code I found from this site, but it renders nothing. Does anyone know what the problem is?

<?php /* Template Name: Custom Post Type Archive */
get_header(); ?>

<?php
global $query_string;
query_posts($query_string . "post_type=YOUR-CUSTOM-POST-TYPE&post_status=publish&posts_per_page=10");
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<h2><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>

<?php endwhile;
endif; ?>
<div class="navigation">
    <div class="alignleft"><?php next_posts_link('Previous entries') ?></div>
    <div class="alignright"><?php previous_posts_link('Next entries') ?></div>
</div>
<?php wp_reset_query(); ?>

<?php get_sidebar(); ?>
<?php get_footer();?>

Related posts

Leave a Reply

3 comments

  1. If you have created a new Custom Post Type then to show them on the site you need to use the following files in your theme folder:

    • archive-{CPT}.php
    • single-{CPT}.php (Optional if you want to display a single post differently)

    Replace {CPT} with the name of the Custom Post Type you have setup. Then in those files just do a normal loop like in your index.php file.

    E.G.

    <?php get_header(); ?>
    
        <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    
            <?php /* Your Posts Content */ ?>
    
        <?php endwhile; else: ?>
            <div class="post">
                <p><?php _e('Sorry, no posts matched your criteria.', "hi-rezz"); ?></p>
            </div>
        <?php endif; ?>
    
    <?php get_footer(); ?>
    
  2. <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    
        <?php /* Your Posts Content */ ?>
    
    <?php endwhile; else: ?>
        <div class="post">
            <p><?php _e('Sorry, no posts matched your criteria.', "hi-rezz"); ?></p>
        </div>
    <?php endif; ?>