Come creare una pagina di elenco per tassonomie personalizzate?
Sto lavorando a un sito per un ristorante e ho un custom post type per i piatti, così:
$args = array(
'labels'=> $labels,
'public'=> true,
'publicly_queryable'=>true,
'show_ui'=>true,
'show_in_nav_menus'=>true,
'query_var'=>'dish',
'rewrite'=>true,
'capability_type'=>'post',
'hierarchicial'=>false,
'menu_position'=>5,
'supports'=>array(
'title',
'editor',
'thumbnail',
'excerpt',
'custom-fields',
'revisions'
)
);
register_post_type('dish', $args);
Un esempio di una delle tassonomie personalizzate che voglio usare è questo:
register_taxonomy('Main Ingredient', array('dish'), array(
'hierarchical' => true,
'label' => 'Ingrediente Principale',
'singular_label' => 'Ingrediente Principale',
'query_var'=>true,
'rewrite' => true)
);
Le tassonomie personalizzate funzionano bene nell'admin, e posso andare su myurl.com/main-ingredient/pork
e vedere un elenco di tutti i piatti con il maiale come ingrediente.
Quello che voglio fare è poter accedere a myurl.com/main-ingredient
e ottenere un elenco di tutti i vari valori di main-ingredient.
Ho trovato questo riferimento, che è esattamente quello che sto cercando di fare.
Ma la soluzione non funziona per me - ottengo ancora un errore 404 quando vado su myurl.com/main-ingredient
Qualche suggerimento su come farlo al meglio?

Non esiste una funzionalità integrata in WordPress che fornisca una pagina "indice" per la tua tassonomia come la tua domanda sembra implicare che dovrebbe esserci (e sono d'accordo, dovrebbe esserci! Ma non c'è.)
Invece devi trovare una soluzione alternativa e un modo per farlo è creare una pagina chiamata "Ingrediente Principale" con uno slug URL main-ingredient
e assegnarle un template di pagina per il tuo tema che dovrai creare (forse) chiamato "Lista Ingredienti Principali":
(fonte: mikeschinkel.com)
Ecco un punto di partenza; potresti usare il nome del file page-main-ingredient-list.php
per il tuo template di pagina:
<?php
/*
Template Name: Lista Ingredienti Principali
*/
get_header();
$main_ingredients = get_terms('main-ingredient');
foreach($main_ingredients as $main_ingredient) {
$dishes = new WP_Query(array(
'post_type' => 'dish',
'post_per_page'=>-1,
'taxonomy'=>'main-ingredient',
'term' => $main_ingredient->slug,
));
$link = get_term_link(intval($main_ingredient->term_id),'main-ingredient');
echo "<h2><a href=\"{$link}\">{$main_ingredient->name}</a></h2>";
echo '<ul>';
while ( $dishes->have_posts() ) {
$dishes->the_post();
$link = get_permalink($post->ID);
$title = get_the_title();
echo "<li><a href=\"{$link}\">{$title}</a></li>";
}
echo '</ul>';
}
get_footer();
Ed ecco come appare la pagina con alcuni dati di esempio sul mio sito di test:

@Josh - Ho aggiunto il codice che trovi qui al file functions.php
del mio tema e poi sono andato su http://wp30.dev/main-ingredient/chicken/
(wp30.dev
è il mio sito di test locale) e ho ottenuto questo screenshot. Quindi se non funziona hai qualche plugin o altro codice che ne impedisce il funzionamento.

Grazie per la risposta Mike. Funziona per me, ma non è il problema che sto cercando di risolvere. Sto cercando di ottenere un elenco degli ingredienti principali andando al livello superiore della tassonomia. In altre parole, se elimini "chicken" dal tuo URL, dovresti ottenere una pagina 404. Questo è il problema che sto riscontrando.

@Josh - Ok, ora ho capito. Scusa, oggi ho risposto a troppe domande. Per tua informazione, non c'è nessun modo "integrato" in WordPress per gestire quello che stai chiedendo. Avrebbe molto senso che fosse lì automaticamente, ma al momento non è così. Scriverò un aggiornamento che è una soluzione alternativa.

Fantastico, grazie - non vedo l'ora di mettere questa cosa alle spalle. ;-)

@Josh - Penso che la mia risposta aggiornata avrà più senso per te.

Sì, ci avevo già pensato, ma odio perdere la fantastica funzionalità integrata della visualizzazione dei post e della navigazione tramite i termini della tassonomia. Grazie comunque per le risposte.
Speriamo che WP aggiunga presto quella funzionalità di indice della tassonomia.

@Josh - "ma odio perdere la fantastica funzionalità integrata della visualizzazione dei post e della navigazione tramite i termini della tassonomia": Devo aver frainteso qualcosa perché non vedo come si perda qualcosa con questo?

Ho pensato di fare questo come ultima risorsa in un progetto di tassonomia personalizzata su cui sto lavorando (preferirei non ingombrare l'elenco delle Pagine del mio cliente con un mucchio di pagine vuote), ma non trovando altre risposte, credo che questo sia ancora l'unico modo per realizzare un'attività simile a quella del poster originale. Mike, sai se l'hanno aggiornato nelle versioni recenti?

@aendrew - "Mike, sai se l'hanno aggiornato nelle versioni recenti?" Scusa ma non riesco a seguire il contesto della tua domanda. Forse è meglio fare una nuova domanda?

Vorrei solo far notare che chi ha posto la domanda sta usando un nome non valido per la funzione register_taxonomy, il nome della tassonomia deve essere tutto in minuscolo e senza spazi come da documentazione che afferma: "Il nome della tassonomia. Il nome dovrebbe essere in formato slug (non deve contenere lettere maiuscole o spazi)". Domanda vecchia, ma qualcosa da tenere a mente se stai usando i consigli e il codice di questa domanda per i tuoi progetti.
