I'm trying to create archive pages for my custom post type. I create custom post types from within custom classes:
functions.php
include_once(get_template_directory() . '/admin/admin_init.php');
admin_init.php
include_once(ADMIN_CPT_DIR . '/CPT.php');
CPT.php
class CPT
{
protected $cpt_name;
public function __construct($cpt_name)
{
$this->cpt_name = $cpt_name;
add_action('init', array( $this, 'cpt_init' ) );
}
public function cpt_init()
{
$labels = array(
'name' => __('custom_name', 'textDomain'),
'singular_name' => __('custom_name', 'textDomain')
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'show_ui' => true,
'show_in_menu' => true,
'has_archive' => true,
'query_var' => true,
'rewrite' => array('slug' => 'custom_name'),
'supports' =>array('title','editor', 'custom-fields','thumbnail')
);
register_post_type( $this->cpt_name, $args );
}
}
if( is_admin() )
$cpt = new CPT('cpt_child');
The custom post type is registered and all works fine, but I always get a 404 when trying to access the archive page (archive-custom_name.php).
If I take the inner part of the cpt_init - method and put it into the functions.php like so:
add_action( 'init', 'create_post_type' );
function create_post_type()
{
$labels = array(
'name' => __('mycpt', 'synTh_textDomain'),
'singular_name' => __('mycpt', 'synTh_textDomain')
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'show_ui' => true,
'show_in_menu' => true,
'has_archive' => true,
'query_var' => true,
'rewrite' => array('slug' => 'boom'),
'supports' =>array('title','editor', 'custom-fields','thumbnail')
);
register_post_type( 'mycpt', $args );
}
everything works as expected. There is an archive-boom.php
, which I can access via: www.domain.com/boom/
I flushed the permalinks settings and I have them set to postname.
Is there a difference, when attaching to a hook from inside a class??