Pagina archivio post type non funziona
Ho registrato un post type personalizzato usando Custom Post Type UI e ho creato una pagina archivio chiamata archive-recipe.php, dove 'recipe' è il nome del mio post type personalizzato. Ma non funziona, invece sta usando il file archive.php
di default. Ho impostato has-archive
a true
ma ancora non funziona. Come posso risolvere?
Ecco il codice:
register_post_type(
'recipe', array(
'label' => 'Ricetta',
'description' => 'Questo è un post type personalizzato per Ricette',
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'capability_type' => 'post',
'hierarchical' => true,
'rewrite' => array('slug' => ''),
'query_var' => true,
'has_archive' => true,
'exclude_from_search' => false,
'supports' => array('title','editor','excerpt','trackbacks','custom-fields','comments','revisions','thumbnail','author','page-attributes',),
'labels' => array (
'name' => 'Ricette',
'singular_name' => 'Ricetta',
'menu_name' => 'Ricette',
'add_new' => 'Aggiungi Ricetta',
'add_new_item' => 'Aggiungi Nuova Ricetta',
'edit' => 'Modifica',
'edit_item' => 'Modifica Ricetta',
'new_item' => 'Nuova Ricetta',
'view' => 'Vedi Ricetta',
'view_item' => 'Vedi Ricetta',
'search_items' => 'Cerca Ricette',
'not_found' => 'Nessuna Ricetta Trovata',
'not_found_in_trash' => 'Nessuna Ricetta nel Cestino',
'parent' => 'Ricetta Genitore',
),
)
);
Dato il registro standard, dovresti avere quanto segue:
- Un tipo di post con il nome 'recipe' (ricetta)
- Un archivio di post di ricette su example.com/recipe/
- Post di ricette con URL nel formato example.com/recipe/helloworldrecipe/
- Un template
archive-recipe.php
- Un template
single-recipe.php
Tuttavia, vedo questo nel tuo codice di registrazione:
'rewrite' => array('slug' => ''),
Ciò suggerisce che quello che stai cercando di fare è rimuovere il prefisso 'recipe' dagli URL delle ricette. Il risultato di questo è che il tuo archivio di post di ricette ora è:
URL del sito + ''
Che è già occupato dalla homepage, quindi il tuo archivio di post è impossibile da raggiungere.
Inoltre, non fa effettivamente quello che pensi. Non puoi cambiare un tipo di post personalizzato per non avere la parte '/recipe/' nei suoi URL utilizzando solo i parametri rewrite di register_post_type. Devi apportare altre modifiche, che introducono anche potenziali bug che potrebbero compromettere il sito.
Ad esempio, se hai una pagina chiamata 'pumpkin' (zucca) e una ricetta chiamata 'pumpkin', come fa WordPress a sapere quale caricare quando si visita example.com/pumpkin? Non lo sa, quindi opterà per la prima regola di riscrittura che trova.
Quindi se hai una ricetta per la torta, ma non c'è una pagina chiamata torta, e cerca la pagina senza trovarla, non ottieni la ricetta, ma un errore 404.
Quindi ti consiglio vivamente di abbandonare il tuo tentativo. Rende i tuoi URL meno sensati e, nonostante le sciocchezze dette dagli "esperti" di SEO, è più probabile che danneggi, piuttosto che aiutare, il tuo posizionamento nei motori di ricerca, se fa qualcosa (è molto probabile che non faccia assolutamente nulla per aiutarti).
Quindi rimuovi il parametro rewrite e salva nuovamente i tuoi permalink.
Aggiornamento
Dopo che hai pubblicato questo link:
http://seemynewwebsite.com/g2bm/recipecategory/appetizers/
Ora è chiaro che stai caricando una tassonomia e ti aspetti un archivio di tipo di post. Una tassonomia non è un tipo di post, come puoi vedere qui, non condividono gli stessi fallback:
Inoltre, non avrebbe senso che lo facessero. Ad esempio, quale template di archivio di tipo di post verrebbe utilizzato in questi scenari:
- Una tassonomia che contiene 2 tipi di post, persone e luoghi. Utilizzerebbe archive-location.php o archive-people.php?
- Una tassonomia utente, riferita agli utenti, non ai post
Quindi, invece, utilizza un template di tassonomia per la tua tassonomia, non un template di archivio di tipo di post. In questo caso taxonomy-recipecategory.php

Grazie, buon miglioramento, la ricetta ora mostra i post, prima dava 404.. ma sono ancora confuso su questo, in realtà pensavo che se visualizzo la singola categoria esempio, avrebbe usato l'archive-recipe.php che ho creato, ma invece sta ancora usando archive.php. Cosa c'è che non va?

Aaaaah, archive-recipe.php è per un archivio di post, quello non è un archivio di post, è un elenco di tassonomia, ti serve un template di tassonomia.

grazie, ho creato taxonomy-recipe.php ma ancora niente, continua a usare archive.php..

La tua tassonomia non si chiama ricetta, ricetta è un tipo di post non una tassonomia. taxonomy-taxonomyname.php
, il tipo di post che una tassonomia elenca è completamente irrilevante in questo contesto

Aggiungi questo filtro al tuo file functions.php:
function namespace_add_custom_types( $query ) {
if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
$query->set( 'post_type', array(
'post', 'nav_menu_item', 'your-custom-post-type-here'
));
return $query;
}
}
add_filter( 'pre_get_posts', 'namespace_add_custom_types' );
