Come creare una pagina di elenco per tassonomie personalizzate?

30 gen 2011, 06:09:56
Visualizzazioni: 17.3K
Voti: 12

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?

0
Tutte le risposte alla domanda 1
12
20

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

Screenshot che mostra dove impostare il Template di Pagina in WordPress
(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:

Screenshot di una Pagina Indice di Tassonomia per un Sito WordPress

30 gen 2011 06:58:10
Commenti

Ciao Mike, sì l'ho fatto. Non aiuta.

User User
30 gen 2011 07:25:36

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

MikeSchinkel MikeSchinkel
30 gen 2011 07:34:12

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.

User User
30 gen 2011 07:48:50

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

MikeSchinkel MikeSchinkel
30 gen 2011 07:53:17

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

User User
30 gen 2011 08:12:37

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

MikeSchinkel MikeSchinkel
30 gen 2011 08:31:12

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.

User User
30 gen 2011 08:52:32

@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?

MikeSchinkel MikeSchinkel
30 gen 2011 09:04:07

@Jan - Fatto. :)

t31os t31os
1 mar 2011 12:53:56

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?

aendra aendra
10 apr 2011 20:16:52

@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?

MikeSchinkel MikeSchinkel
15 apr 2011 14:33:21

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.

Dwayne Charrington Dwayne Charrington
8 mag 2012 06:22:48
Mostra i restanti 7 commenti