Skip to content

Bits of .NET

Daily micro-tips for C#, SQL, performance, and scalable backend engineering.

  • Asp.Net Core
  • C#
  • SQL
  • JavaScript
  • CSS
  • About
  • ErcanOPAK.com
  • No Access
  • Privacy Policy
Wordpress

WordPress: Create Custom Post Types for Structured Content

- 13.06.26 - ErcanOPAK

📦 Beyond Blog Posts: Portfolio, Products, Events

Default “post” not enough. Custom Post Types (CPT) create dedicated content structures. Separate admin menus, custom fields, different templates.

📝 Register CPT

// functions.php
function create_portfolio_cpt() {
    register_post_type('portfolio',
        array(
            'labels' => array(
                'name' => __('Portfolio'),
                'singular_name' => __('Portfolio Item'),
                'add_new' => __('Add New'),
                'add_new_item' => __('Add New Portfolio Item'),
                'edit_item' => __('Edit Portfolio Item'),
                'new_item' => __('New Portfolio Item'),
                'view_item' => __('View Portfolio Item'),
                'search_items' => __('Search Portfolio'),
                'not_found' => __('No portfolio items found'),
                'not_found_in_trash' => __('No portfolio items found in trash')
            ),
            'public' => true,
            'has_archive' => true,
            'supports' => array('title', 'editor', 'thumbnail', 'excerpt'),
            'menu_icon' => 'dashicons-portfolio',
            'show_in_rest' => true,  // Block editor support
            'rewrite' => array('slug' => 'work')
        )
    );
}
add_action('init', 'create_portfolio_cpt');

🎯 Display CPT

// archive-portfolio.php
<?php
$portfolio = new WP_Query(array(
    'post_type' => 'portfolio',
    'posts_per_page' => 9
));

if ($portfolio->have_posts()) :
    while ($portfolio->have_posts()) : $portfolio->the_post(); ?>
        <div class="portfolio-item">
            <?php the_post_thumbnail('medium'); ?>
            <h3><?php the_title(); ?></h3>
            <?php the_excerpt(); ?>
            <a href="<?php the_permalink(); ?>">View Project</a>
        </div>
    <?php endwhile;
    wp_reset_postdata();
endif;
?>

💡 Use Cases

  • Portfolio (work samples)
  • Products (e-commerce)
  • Events (calendar)
  • Testimonials (client reviews)
  • Team members (staff profiles)

“Portfolio and blog posts mixed together. Created CPT for portfolio. Separate admin menu, custom fields, different URL structure. Much cleaner.”

— WordPress Developer

Related posts:

Fix Random Logouts Caused by Cookie Domain Mismatch

WordPress: WP_Query Best Practices to Avoid Performance Pitfalls

WordPress: Change Database Prefix for Security

Post Views: 5

Post navigation

Photoshop: Record Actions to Automate Repetitive Tasks
Kubernetes: Use Labels and Selectors to Organize Resources

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

July 2026
M T W T F S S
 12345
6789101112
13141516171819
20212223242526
2728293031  
« Jun    

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (960)
  • How to add default value for Entity Framework migrations for DateTime and Bool (898)
  • How to make theater mode the default for Youtube (858)
  • Get the First and Last Word from a String or Sentence in SQL (840)
  • How to select distinct rows in a datatable in C# (814)
  • How to enable, disable and check if Service Broker is enabled on a database in SQL Server (597)
  • Add Constraint to SQL Table to ensure email contains @ (582)
  • Average of all values in a column that are not zero in SQL (545)
  • How to use Map Mode for Vertical Scroll Mode in Visual Studio (512)
  • Find numbers with more than two decimal places in SQL (460)

Recent Posts

  • C#: Use Using Statements for Resource Management
  • C#: Use Lambda Expressions for Concise Code
  • SQL: Use GROUP BY for Data Aggregation
  • .NET Core: Master Routing for Clean URLs
  • Git: Use Reset to Undo Local Changes
  • Ajax: Use Axios for HTTP Requests
  • JavaScript: Understand Hoisting
  • HTML: Use Web Storage for Client-Side Data
  • CSS: Use Filter Effects for Visual Magic
  • Windows 11: Unlock God Mode for All Settings

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (960)
  • How to add default value for Entity Framework migrations for DateTime and Bool (898)
  • How to make theater mode the default for Youtube (858)
  • Get the First and Last Word from a String or Sentence in SQL (840)
  • How to select distinct rows in a datatable in C# (814)

Recent Posts

  • C#: Use Using Statements for Resource Management
  • C#: Use Lambda Expressions for Concise Code
  • SQL: Use GROUP BY for Data Aggregation
  • .NET Core: Master Routing for Clean URLs
  • Git: Use Reset to Undo Local Changes

Social

  • ErcanOPAK.com
  • GoodReads
  • LetterBoxD
  • Linkedin
  • The Blog
  • Twitter
© 2026 Bits of .NET | Built with Xblog Plus free WordPress theme by wpthemespace.com