web-dev-qa-db-fra.com

Une taxonomie personnalisée mène à une page 404 - Structure permalink vidée

J'ai un CPT:

function CPT_init(){
    register_post_type('custcpt', array(
        'labels'            =>  array(
            'name'          =>      __('Products'),
            'singular_name' =>      __('Product'),
            'all_items'     =>      __('View Products'),
            'add_new'       =>      __('New Product'),
            'add_new_item'  =>      __('New Product'),
            'edit_item'     =>      __('Edit Product'),
            'view_item'     =>      __('View Product'),
            'search_items'  =>      __('Search Products'),
            'no_found'      =>      __('No Products Found'),
            'not_found_in_trash' => __('No Products in Trash')
                                ),
        'public'            =>  true,
        'publicly_queryable'=>  true,
        'show_ui'           =>  true, 
        'query_var'         =>  true,
        'show_in_nav_menus' =>  false,
        'capability_type'   =>  'post',
        'hierarchical'      =>  false,
        'rewrite'           =>  array('slug' => '/products/', 'with_front' => false),
        'menu_position'     =>  21,
        'supports'          =>  array('title','editor', 'thumbnail'),
        'has_archive'       =>  true
    ));
}
add_action('init', 'CPT_init');

Et taxonomie avec mon CPT:

function custcpt_category_taxonomy() {
    $labels = array(
        'name'              => __( 'Product Categories' ),
        'singular_name'     => __( 'Product Category' ),
        'search_items'      => __( 'Search Product Categories' ),
        'all_items'         => __( 'All Product Categories' ),
        'parent_item'       => __( 'Parent Product Category' ),
        'parent_item_colon' => __( 'Parent Product Category:' ),
        'edit_item'         => __( 'Edit Product Category' ), 
        'update_item'       => __( 'Update Product Category' ),
        'add_new_item'      => __( 'Add New Product Category' ),
        'new_item_name'     => __( 'New Product Category' ),
        'menu_name'         => __( 'Product Categories' ),
    ); 
    $args = array(
        'labels'            => $labels,
        'public'            =>  true,
        'hierarchical'      =>  true,
        'show_in_nav_menus' =>  true,
        'has_archive'       =>  true,
        'rewrite'           =>  array('slug' => '/products/', 'with_front' => false),
    );
    register_taxonomy( 'custtax', 'custcpt', $args );
}
add_action( 'init', 'custcpt_category_taxonomy');

J'ai une page de produits /products/ et une page de modèle de taxonomie: taxonomy-custtax.php, j'ai essayé taxonomy.php mais cela ne semblait pas avoir d'importance. J'ai rincé mes permaliens probablement 15 à 20 fois maintenant. Cela fonctionne bien avec default mais pas avec %postname%. J'ai ajouté ceci au dessus de ma taxonomie:

function custom_taxonomy_flush_rewrite() {
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}
add_action('init', 'custom_taxonomy_flush_rewrite');

Donc, quand je vais à http://www.mywebsite.com/products/term, je reçois 404 pour une raison ou une autre. Je jure que la taxonomie me pose toujours des problèmes, tous. unique. temps.

3
Howdy_McGee

Retirez les barres obliques sur votre slug de réécriture. Devrait être comme ça:

 ...
 'rewrite'           =>  array('slug' => 'products', 'with_front' => false)
 ...

En outre, vous ne pouvez pas avoir le même slug pour une taxonomie et un type de publication personnalisé. Ils doivent être uniques, sinon WP ne saura pas lequel s'applique à qui.

De plus, si vous avez le slug de votre type de message personnalisé sous la forme products, vous ne pouvez pas avoir une page avec un slug de products également, sinon cela entraînerait des conflits.

Enfin, pour une liste taxonomique personnalisée de ceux-ci, vous souhaitez que le fichier s'intitule taxonomy-{taxonomy_name}.php; dans votre cas, il doit donc être intitulé taxonomy-custtax.php.

Pour la meilleure des chances, je suggère de procéder par étapes:

Commencez par configurer le type de publication personnalisé. Ensuite, si vous définissez le slug sur products (après avoir vidé les règles de réécriture), visitez le site www.monsite.com/products (à nouveau, assurez-vous que rien sinon, dans votre installation, un slug de produits). Vous devriez voir une liste de vos produits (en supposant que vous ayez ajouté des entrées de produit).

Ajoutez ensuite votre fichier archive-custcpt.php à votre thème, modifiez-le d’une manière unique et actualisez-le. Vous devriez voir qu'il est en train de charger votre liste de produits dans ce nouveau modèle.

Ajoutez ensuite votre taxonomie personnalisée. Si votre variable taxonomie est prodcat (pour la catégorie de produits), vous devriez être en mesure de visiter www.monsite.com/prodcat/[term] (où [terme] = une catégorie de produit que vous avez définie).

Enfin, ajoutez votre fichier taxonomy-custtax.php, modifiez-le d’une manière unique et actualisez-le. Vous devriez voir la liste apparaître dans votre nouveau fichier de modèle.

8
cale_b

Supprimez "/" des deux slug et créez un fichier taxonomy-custtax.php puis tout ira bien.

Je cite votre code ci-dessous avec corrigé:

function CPT_init(){
    register_post_type('custcpt', array(
        'labels'            =>  array(
            'name'          =>      __('Products'),
            'singular_name' =>      __('Product'),
            'all_items'     =>      __('View Products'),
            'add_new'       =>      __('New Product'),
            'add_new_item'  =>      __('New Product'),
            'edit_item'     =>      __('Edit Product'),
            'view_item'     =>      __('View Product'),
            'search_items'  =>      __('Search Products'),
            'no_found'      =>      __('No Products Found'),
            'not_found_in_trash' => __('No Products in Trash')
                                ),
        'public'            =>  true,
        'publicly_queryable'=>  true,
        'show_ui'           =>  true, 
        'query_var'         =>  true,
        'show_in_nav_menus' =>  false,
        'capability_type'   =>  'post',
        'hierarchical'      =>  false,
        'rewrite'           =>  array('slug' => '/products', 'with_front' => false),
        'menu_position'     =>  21,
        'supports'          =>  array('title','editor', 'thumbnail'),
        'has_archive'       =>  true
    ));
}
add_action('init', 'CPT_init');


function custcpt_category_taxonomy() {
    $labels = array(
        'name'              => __( 'Product Categories' ),
        'singular_name'     => __( 'Product Category' ),
        'search_items'      => __( 'Search Product Categories' ),
        'all_items'         => __( 'All Product Categories' ),
        'parent_item'       => __( 'Parent Product Category' ),
        'parent_item_colon' => __( 'Parent Product Category:' ),
        'edit_item'         => __( 'Edit Product Category' ), 
        'update_item'       => __( 'Update Product Category' ),
        'add_new_item'      => __( 'Add New Product Category' ),
        'new_item_name'     => __( 'New Product Category' ),
        'menu_name'         => __( 'Product Categories' ),
    ); 
    $args = array(
        'labels'            => $labels,
        'public'            =>  true,
        'hierarchical'      =>  true,
        'show_in_nav_menus' =>  true,
        'has_archive'       =>  true,
        'rewrite'           =>  array('slug' => '/products', 'with_front' => false),
    );
    register_taxonomy( 'custtax', 'custcpt', $args );
}
add_action( 'init', 'custcpt_category_taxonomy');
0