I have registered a custom post type and I want to create a page where I will list some posts, it will be like an index page.
I have created an archive page called mycpt-archive.php and a page called myCPT.php.
I’ve added a custom URL in the menu called “myCPT” like this : www.mywebsite.com/mycpt
Now, when I click from the front-end menu on “myCPT” it displays the mycpt-archive.php content and not the myCPT.php.
I’ve looked through the template hierarchy from CODEX and it seems I’m on the right track.
When I click on “myCPT” from the front-end menu the page displayed is mycpt-archive.php not myCPT.php which I’m expecting to open.
What am I missing here ?
Thank you !
If you have:
register_post_type( 'my_custom_post_type', $args );
And you need a custom page to displays all entries from this custom post type, you have to create: archive-my_custom_post_type.php
.
But if you don’t need a custom page, wordpress will use archive.php to display you custom post type archive.
If you only need to customize the entry page, you have to create: single-my_custom_post_type.php
Where are you creating the custom post type, in theme functions.php or using a plugin?
If using functions.php, you need to create archive-my_custom_post_type.php
or single-my_custom_post_type.php
in theme’s folder.
If using a plugin, you need to create archive-my_custom_post_type.php
or single-my_custom_post_type.php
in plugins’s folder and point wordpress to read it, so include this function in your plugin:
function get_custom_post_type_template($template) {
global $post;
if ($post->post_type == 'my_custom_post_type') {
$template = dirname( __FILE__ ) . '/archive-my_custom_post_type.php';
}
return $template;
}
//add_filter( "single_template", "get_custom_post_type_template" ); //for single page
add_filter( "archive_template", "get_custom_post_type_template" ); //for archive