Custom taxonomy template is not selected by default

I have register a custom post type faq and a taxonomy for faq named cat_faq. I created a template named taxonomy-cat_faq.php, but it is not selected by default. It always displays a 404 page. I could not understand why this happens so? I read out the Template Hierarchy and worked as follows but failed to find out the error. I have attached the code below

add_action('init', 'register_faq');
function register_faq(){
    $post_type = 'faq';
    $label = array(
        'name'          => _x('FAQ', 'FAQ', 'faq'),
        'singular_name' => _x('FAQ', 'FAQ', 'faq'),
        'menu_name'     => _x('FAQ', 'admin menu', 'faq')
        );
    $args = array(
        'labels'        => $label,
        'public'    => true,
        'rewrite'   => array('slug' => 'faq'),
        'capability'    => 'post',
        'supports'      => array('title', 'editor', 'thumbnail'),
    );
    register_post_type($post_type, $args);
}

// create taxonomies for the post type "faq"
add_action( 'init', 'create_faq_taxonomies', 0 );
function create_faq_taxonomies() {
    $labels = array(
        'name'              => _x( 'FAQ', 'taxonomy general name' ),
        'singular_name'     => _x( 'FAQ', 'taxonomy singular name' ),
        'search_items'      => __( 'Search FAQ' ),
        'edit_item'         => __( 'Edit FAQ' ),
        'update_item'       => __( 'Update FAQ' ),
        'add_new_item'      => __( 'Add New FAQ' ),
        'new_item_name'     => __( 'New FAQ' ),
        'menu_name'         => __( 'Category FAQ' ),
    );

    $args = array(
        'hierarchical'      => true,
        'labels'            => $labels,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array( 'slug' => 'cat_faq' ),
    );

    register_taxonomy( 'cat_faq', array( 'faq' ), $args );
}   

Related posts

1 comment

  1. It’s better to make your custom post types in this fashion. The flush_rewrite_rules() will cure the 404’s. See The Codex
    This example is for creating new custom post types on the activation of your plugin.

    add_action( 'init', 'my_cpt_init' );
    function my_cpt_init() {
        register_post_type( ... );
    }
    
    function my_rewrite_flush() {
        // First, we "add" the custom post type via the above written function.
        // Note: "add" is written with quotes, as CPTs don't get added to the DB,
        // They are only referenced in the post_type column with a post entry, 
        // when you add a post of this CPT.
        my_cpt_init();
    
        // ATTENTION: This is *only* done during plugin activation hook in this example!
        // You should *NEVER EVER* do this on every page load!!
        flush_rewrite_rules();
    }
    register_activation_hook( __FILE__, 'my_rewrite_flush' );
    

Comments are closed.