By default, WordPress pages use the theme’s page template, and blog posts use the single post template. This works well for most sites, but sometimes you need more control. We need a dedicated portfolio page, a custom landing page, or a page that displays posts from a custom post type. Custom page templates let you define your own layout and content for any page, while still using your theme’s header and footer.
Before We Start Coding
- Always work in a child theme or use a plugin like Code Snippets for PHP changes.
- Make sure you already have a custom post type called
portfolio.
Ensure that a portfolio Custom post type is already registered. For reference, see our detailed guide: How to Create a Custom Post Type in WordPress.
Step 1: Create the Template File
Inside your child theme folder, create a file called: template-portfolio.php
Paste this code inside it:
<?php
/**
* Template Name: Custom Template
* Description: A simple template to display Portfolio items only.
*/
get_header(); // Include header
?>
<div class="portfolio-page">
<div class="container">
<h1><?php the_title(); ?></h1>
<div class="page-content">
<?php while (have_posts()) : the_post(); the_content(); endwhile; ?>
</div>
<?php
// Custom query for Portfolio posts
$portfolio_query = new WP_Query(array(
'post_type' => 'portfolio',
'posts_per_page' => 10, // Number of portfolio items to show
));
if ($portfolio_query->have_posts()) :
?>
<section class="portfolio-section">
<h2>Latest Portfolio Projects</h2>
<div class="portfolio-grid">
<?php while ($portfolio_query->have_posts()) : $portfolio_query->the_post(); ?>
<div class="portfolio-item">
<?php if (has_post_thumbnail()) : ?>
<a href="<?php the_permalink(); ?>">
<?php the_post_thumbnail('medium'); ?>
</a>
<?php endif; ?>
<h3><?php the_title(); ?></h3>
<div><?php the_excerpt(); ?></div>
</div>
<?php endwhile; wp_reset_postdata(); ?>
</div>
</section>
<?php else: ?>
<p>No portfolio items found.</p>
<?php endif; ?>
</div>
</div>
<?php get_footer(); ?>
Step 2: Assign the Template to a Page
- In your dashboard, go to Pages → Add New.
- Give it a title like “Our Work” or “Portfolio.”
- In the right-hand “Template” dropdown, choose Custom Template.
- Publish the page.
Now visit the page on the front end and you’ll see your page title and intro text, followed by a grid of portfolio items.






