Pagina archivio post type non funziona

15 mag 2013, 15:57:20
Visualizzazioni: 15.1K
Voti: 2

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',
    ),
    )
);
4
Commenti

Per favore pubblica il codice effettivo di registrazione del custom post type. Inoltre: cosa succede se imposti i permalink su predefinito (cioè senza rewrite), e/o resetti le impostazioni dei permalink?

Chip Bennett Chip Bennett
15 mag 2013 16:01:21

Ho aggiunto il codice nella modifica, ho provato il permalink predefinito e sembra funzionare come previsto

markyeoj markyeoj
15 mag 2013 16:11:10

Il tuo codice sembra funzionare bene per me. Per favore controlla: http://wordpress.stackexchange.com/q/98995/21376 Credo che potrebbe essere un duplicato funzionale di quello.

s_ha_dum s_ha_dum
15 mag 2013 16:44:53

Guardando lo slug di riscrittura che hai impostato, stai cercando di rimuovere il prefisso del tipo di post per farlo funzionare come le pagine? Se è così, questo non funzionerà, e dovrai fare molto di più che modificare alcuni flag in register_post_type, introducendo potenzialmente bug che potrebbero rompere il sito (conflitti di permalink tra pagine/categorie e i nuovi URL del tipo di post)

Tom J Nowell Tom J Nowell
15 mag 2013 16:45:38
Tutte le risposte alla domanda 2
5
11

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:

Descrizione dell'immagine qui

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

15 mag 2013 16:53:44
Commenti

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?

markyeoj markyeoj
15 mag 2013 18:26:42

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.

Tom J Nowell Tom J Nowell
15 mag 2013 18:58:13

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

markyeoj markyeoj
15 mag 2013 19:21:26

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

Tom J Nowell Tom J Nowell
15 mag 2013 19:46:00

perfetto, grazie @tom per la tua pazienza, in questa discussione ho imparato moltissimo da te. Grazie mille.

markyeoj markyeoj
15 mag 2013 19:51:44
2
-2

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' );
9 mar 2015 14:37:29
Commenti

Per favore aggiungi una spiegazione alla tua risposta: perché potrebbe risolvere il problema?

fuxia fuxia
9 mar 2015 14:38:33

Questa risposta non risponde nemmeno lontanamente alla domanda.

TheDeadMedic TheDeadMedic
9 mar 2015 15:49:46