La pagina archivio del custom post type non funziona
Sto cercando di creare un custom post type. Tutto funziona correttamente tranne la pagina archivio. La mia pagina archivio del custom post type è archive-courses.php ma non funziona e mostra il file archive.php predefinito. C'è qualcosa di sbagliato nel mio codice?
Qualcuno può aiutarmi, per favore?
function td_courses() {
$labels = array(
'name' => _x( 'Corsi', 'td' ),
'singular_name' => _x( 'Corsi', 'td' ),
'add_new' => _x( 'Aggiungi Nuovo', 'td' ),
'add_new_item' => __( 'Aggiungi Nuovo corso' ),
'edit_item' => __( 'Modifica corso' ),
'new_item' => __( 'Nuovi corsi' ),
'all_items' => __( 'Corsi' ),
'view_item' => __( 'Visualizza corsi' ),
'search_items' => __( 'Cerca corsi' ),
'not_found' => __( 'Nessun corso trovato' ),
'not_found_in_trash' => __( 'Nessun corso trovato nel Cestino' ),
'menu_name' => 'Corsi'
);
$args = array(
'labels' => $labels,
'public' => true,
'menu_position' => 10,
'menu_icon' => 'dashicons-welcome-learn-more',
'supports' => array( 'title', 'editor', 'thumbnail', 'author' ),
'has_archive' => true,
'capability_type' => 'page',
'rewrite' => array( 'slug' => 'corso' ),
);
register_post_type( 'courses', $args );
}
add_action( 'init', 'td_courses' );
function td_courses_taxonomies() {
$labels = array(
'name' => _x( 'Categorie Corsi', 'td' ),
'singular_name' => _x( 'Categorie Corsi', 'td' ),
'search_items' => __( 'Cerca Categoria Corso' ),
'all_items' => __( 'Tutte le Categorie Corsi' ),
'parent_item' => __( 'Categoria Corso Genitore' ),
'parent_item_colon' => __( 'Categoria Corso Genitore:' ),
'edit_item' => __( 'Modifica Categoria Corso' ),
'update_item' => __( 'Aggiorna Categoria Corso' ),
'add_new_item' => __( 'Aggiungi Nuova Categoria Corso' ),
'new_item_name' => __( 'Nuovo Nome Categoria Corso' ),
'menu_name' => __( 'Categoria Corso' ),
);
$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'lista-corsi' ),
);
register_taxonomy( 'courses_category', array( 'courses' ), $args );
}
add_action( 'init', 'td_courses_taxonomies', 0 );
Grazie

Il tuo post type, courses
, ha uno slug di rewrite impostato come course
. Quindi il tuo template di archivio sarà archive-course.php
.
La tua tassonomia, courses_category
, ha uno slug di rewrite impostato come course
, quindi il tuo template di archivio per la tassonomia sarà taxonomy-courses.php
.
Questa gerarchia completa dei template può essere utile.
Se desideri una pagina di archivio che mostri tutti i post del post type courses
all'indirizzo yoursite.com/courses
, dovresti assegnare al post type uno slug di rewrite courses
. (Credo che questo sia il valore predefinito dato che il tuo post type è courses
.)
Il template di archivio per la tassonomia, taxonomy-[slug].php
, verrà richiamato quando si visualizza una pagina di archivio di tutti i post del post type courses
assegnati a un termine specifico della tassonomia. Quindi, se avessi un termine beginner
e lo slug di rewrite courses
per il termine della tassonomia, vedresti un archivio di corsi per principianti all'indirizzo yoursite.com/courses/beginner
.
Se assegni lo stesso slug di rewrite sia al post type che alla tassonomia, potresti avere qualche conflitto. Ma non ne sono sicuro.
Come ha detto Pieter Goosen, dovrai svuotare le regole di rewrite ogni volta che apporti modifiche di questo tipo.

In realtà non ho nemmeno controllato gli slug di riscrittura quando ho dato un'occhiata al codice. Molto probabilmente, il problema è lo slug di riscrittura. Puoi avere lo stesso slug per il tuo post type e la tassonomia, ma richiederebbe un bel po' di lavoro extra. Ricordo di aver risposto a una domanda simile un po' di tempo fa, dove abbiamo usato un plugin per risolvere il problema con le regole di riscrittura. In breve, è meglio evitare di avere gli stessi slug di riscrittura.

Strano, ho cambiato il nome del mio template di archivio in archive-course.php ma ho ancora lo stesso problema. Ho anche cambiato lo slug di riscrittura delle mie tassonomie in courses-list, ma niente da fare :(

aggiorna la tua domanda con quello che hai ora, è difficile capire se devi usare course
o courses
?

Hai nuovamente svuotato le regole di riscrittura? Cose che ti consiglio di provare: imposta archive-course.php
e archive-courses.php
e poi prova a rimuovere le tue regole di riscrittura per vedere dove arrivi. Assicurati di stare effettivamente guardando la pagina giusta (il tuo tag <body>
dovrebbe avere una classe post-type-archive-courses
-- se il tema usa body_class()
correttamente).

Sì. Ho nuovamente salvato il permalink e ho la classe body nel mio template, mostra l'elenco delle classi archive tax-courses_category term-test-1 term-6 logged-in admin-bar hfeed customize-support
Inoltre, ho creato entrambe le pagine di archivio archive-courses-list.php, archive-courses.php e archive-course.php ma nessuna funziona

I nomi delle classi che descrivi vengono aggiunti a un archivio di tassonomia che caricherà il file template taxonomy-<slug>.php
. Se non vedi la classe post-type-archive-courses
nel tag body del tuo sito, non sei nella pagina di archivio del post type.

Sì. Finalmente, sta mostrando la mia pagina. taxonomy-courses_category.php questo funziona.
Ma sono ancora confuso, perché il mio archive-courses.php non funziona. Ho usato questo sistema per visualizzare le mie categorie l'ultima volta. Ma questa volta non ho avuto fortuna :(

Secondo il codice che hai postato, il template archive-courses.php
dovrebbe essere visualizzato quando visiti yoursite.com/course
. Se non è così, probabilmente non hai eseguito correttamente il flush delle regole di riscrittura, oppure hai altre regole che interferiscono con le regole di archivio del tuo CPT.
