La pagina archivio del custom post type non funziona

4 lug 2016, 12:06:56
Visualizzazioni: 33.1K
Voti: 1

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

5
Commenti

Hai aggiornato i tuoi permalink?

Pieter Goosen Pieter Goosen
4 lug 2016 12:25:59

No, non ho fatto nulla con i permalink.

Khandaker Ikrama Khandaker Ikrama
4 lug 2016 12:36:24

Devi aggiornare i permalink quando crei una nuova tassonomia o un custom post type. Basta visitare la pagina dei permalink e cliccare su salva/aggiorna

Pieter Goosen Pieter Goosen
4 lug 2016 12:39:53

Ok. Fatto. Ma il problema persiste. :(

Khandaker Ikrama Khandaker Ikrama
4 lug 2016 12:43:31

Vedo che mi è sfuggito, non puoi avere la stessa regola di riscrittura sia per il tuo post type che per la tassonomia

Pieter Goosen Pieter Goosen
4 lug 2016 12:50:18
Tutte le risposte alla domanda 2
9

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.

4 lug 2016 12:45:28
Commenti

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.

Pieter Goosen Pieter Goosen
4 lug 2016 12:53:34

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 :(

Khandaker Ikrama Khandaker Ikrama
4 lug 2016 13:07:33

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

majick majick
4 lug 2016 13:15:05

Aggiorna semplicemente il codice. Per favore controlla ora.

Khandaker Ikrama Khandaker Ikrama
4 lug 2016 13:28:14

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).

NateWr NateWr
4 lug 2016 13:41:42

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

Khandaker Ikrama Khandaker Ikrama
4 lug 2016 13:49:24

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.

NateWr NateWr
4 lug 2016 13:53:32

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 :(

Khandaker Ikrama Khandaker Ikrama
4 lug 2016 13:58:50

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.

NateWr NateWr
4 lug 2016 15:00:24
Mostra i restanti 4 commenti
3

Come ha detto Pieter Goosen, devi aggiornare i tuoi permalink quando crei una nuova tassonomia o un tipo di post personalizzato. Vai nelle impostazioni del tuo sito -> permalink e clicca sul "pulsante salva".

Questo ha risolto il problema per me.

17 dic 2018 18:27:41
Commenti

Potrebbe essere utile includere un esempio di come hai fatto.

butlerblog butlerblog
17 dic 2018 19:51:16

Questo ha risolto il mio problema

Walid Ammar Walid Ammar
22 set 2019 18:14:04

questo è il modo corretto per aggiornare l'URL di routing esistente

Ranjan Fadia Ranjan Fadia
14 dic 2021 13:04:21