Taxonomia personalizată duce la pagina 404 - Structura permalink reîmprospătată

17 oct. 2013, 23:10:08
Vizualizări: 27.7K
Voturi: 3

Am un CPT (Custom Post Type):

function CPT_init(){
    register_post_type('custcpt', array(
        'labels'            =>  array(
            'name'          =>      __('Produse'),
            'singular_name' =>      __('Produs'),
            'all_items'     =>      __('Vezi Produse'),
            'add_new'       =>      __('Produs Nou'),
            'add_new_item'  =>      __('Produs Nou'),
            'edit_item'     =>      __('Editează Produs'),
            'view_item'     =>      __('Vezi Produs'),
            'search_items'  =>      __('Caută Produse'),
            'no_found'      =>      __('Nu s-au găsit Produse'),
            'not_found_in_trash' => __('Nu există Produse în Coș')
                                ),
        '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');

Și Taxonomie cu CPT-ul meu:

function custcpt_category_taxonomy() {
    $labels = array(
        'name'              => __( 'Categorii Produse' ),
        'singular_name'     => __( 'Categorie Produs' ),
        'search_items'      => __( 'Caută Categorii Produse' ),
        'all_items'         => __( 'Toate Categoriile de Produse' ),
        'parent_item'       => __( 'Categorie Părinte Produs' ),
        'parent_item_colon' => __( 'Categorie Părinte Produs:' ),
        'edit_item'         => __( 'Editează Categoria Produsului' ), 
        'update_item'       => __( 'Actualizează Categoria Produsului' ),
        'add_new_item'      => __( 'Adaugă Categorie Nouă de Produs' ),
        'new_item_name'     => __( 'Categorie Nouă de Produs' ),
        'menu_name'         => __( 'Categorii Produse' ),
    ); 
    $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');

Am o pagină de produse /products/ și o pagină template pentru taxonomie: taxonomy-custtax.php, am încercat și taxonomy.php dar nu pare să conteze. Am reîmprospătat permalink-urile probabil de 15-20 de ori până acum. Funcționează bine cu setarea implicită dar nu cu %postname%. Am adăugat acest cod deasupra taxonomiei mele:

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

Așa că atunci când accesez http://www.mywebsite.com/products/term primesc 404 dintr-un motiv sau altul. Jur că taxonomia îmi dă mereu probleme, de fiecare. singură. dată.

0
Toate răspunsurile la întrebare 2
0
12

Eliminați slash-urile din rewrite slug. Ar trebui să arate astfel:

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

De asemenea, nu puteți avea același slug atât pentru o taxonomie cât și pentru un custom post type. Acestea trebuie să fie unice, altfel WordPress nu va ști care se aplică cui.

În plus, dacă aveți slug-ul custom post type-ului ca products, nu puteți avea și o pagină cu slug-ul products, deoarece va cauza conflicte.

În cele din urmă, pentru o listare de taxonomie personalizată, fișierul trebuie să se numească taxonomy-{taxonomy_name}.php, deci în cazul dvs., ar trebui să se numească taxonomy-custtax.php.

Pentru cele mai bune rezultate, vă sugerez să urmați acești pași:

Mai întâi, configurați custom post type-ul. Apoi, dacă setați slug-ul la products (după resetarea regulilor de rewrite), vizitați www.mysite.com/products (asigurați-vă că nimic altceva în instalarea dvs. nu are un slug products). Ar trebui să vedeți o listă a produselor dvs. (presupunând că ați adăugat câteva intrări de produse).

Apoi, adăugați fișierul archive-custcpt.php în tema dvs., modificați-l într-un mod unic și reîmprospătați pagina. Ar trebui să vedeți că acum încarcă lista de produse în acel șablon nou.

După aceea, adăugați taxonomia personalizată. Dacă slug-ul taxonomiei este prodcat (pentru categoria de produse), ar trebui să puteți vizita www.mysite.com/prodcat/[term] (unde [term] = o categorie de produse pe care ați setat-o).

În final, adăugați fișierul taxonomy-custtax.php, modificați-l într-un mod unic și reîmprospătați pagina. Ar trebui să vedeți lista afișată în noul fișier de șablon.

17 oct. 2013 23:20:12
0

Eliminați "/" din ambele slug-uri și creați un fișier taxonomy-custtax.php, apoi va funcționa corect.

Vă citesc codul mai jos cu corecțiile:

function CPT_init(){
    register_post_type('custcpt', array(
        'labels'            =>  array(
            'name'          =>      __('Produse'),
            'singular_name' =>      __('Produs'),
            'all_items'     =>      __('Vezi toate produsele'),
            'add_new'       =>      __('Produs nou'),
            'add_new_item'  =>      __('Produs nou'),
            'edit_item'     =>      __('Editează produs'),
            'view_item'     =>      __('Vezi produs'),
            'search_items'  =>      __('Caută produse'),
            'no_found'      =>      __('Nu s-au găsit produse'),
            'not_found_in_trash' => __('Nu există produse în coșul de gunoi')
                                ),
        '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'              => __( 'Categorii de produse' ),
        'singular_name'     => __( 'Categorie de produs' ),
        'search_items'      => __( 'Caută categorii de produse' ),
        'all_items'         => __( 'Toate categoriile de produse' ),
        'parent_item'       => __( 'Categoria părinte' ),
        'parent_item_colon' => __( 'Categoria părinte:' ),
        'edit_item'         => __( 'Editează categoria' ), 
        'update_item'       => __( 'Actualizează categoria' ),
        'add_new_item'      => __( 'Adaugă o categorie nouă' ),
        'new_item_name'     => __( 'Numele categoriei noi' ),
        'menu_name'         => __( 'Categorii de produse' ),
    ); 
    $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');
17 dec. 2018 15:35:53