Template di archivio per i termini della tassonomia

7 dic 2012, 20:57:46
Visualizzazioni: 21K
Voti: 3

Ho registrato un custom post type [equipment] e ho una tassonomia [equipment_type] che contiene categorie padre e figlie. Per esempio:

Equipment (Custom post type)

Equipment Types (Tassonomia)

Fotocamere (Termine padre)

  • Fotocamera A (Termine figlio)

  • Fotocamera B

Quello che vorrei creare è essenzialmente una pagina di archivio per i termini della tassonomia. Quindi quando viene selezionato 'Fotocamere' o 'Fotocamera A' mostra, ad esempio, 12 post con titolo e immagine in evidenza (con link al post singolo) più la paginazione.

Ho provato una query standard di WordPress e il Loop ma finisce sempre per mostrare tutti i post della tassonomia in tutti i termini.

Al momento ho impostato un template taxonomy-equipment_types.php per gestire la query.

3
Commenti

Per favore, spiega cosa intendi con Categoria Tassonomica. La tua domanda confonde tassonomia e categoria (che è un tipo di tassonomia). Stai dicendo che hai termini gerarchici per la tua tassonomia personalizzata, equipment_type? Inoltre, cameras è un termine per la tassonomia equipment_type?

Chip Bennett Chip Bennett
7 dic 2012 21:00:50

Mi scuso, forse sto confondendo la terminologia. Ho una tassonomia chiamata 'equipment_type' e al suo interno ho 'cameras', 'lenses' ecc... sono questi i termini?

Sono gerarchici e si comportano come farebbero le categorie per i post nella configurazione standard di WP.

user1833715 user1833715
7 dic 2012 21:07:36

Ah, ora ci siamo! cameras, lenses, camera-a e camera-b sono termini della tassonomia equipment_type. I termini camera-a e camera-b sono figli del termine cameras.

Chip Bennett Chip Bennett
7 dic 2012 21:45:05
Tutte le risposte alla domanda 3
0

Voglio documentare questo perché ho trovato la risposta solo recentemente.

Il problema con le tassonomie è che la maggior parte degli sviluppatori si aspetta che la tassonomia sia visibile all'interno dell'URL del post_type come:

http://hostname/post_type/taxonomy_term

Invece, troverai l'URL in questo formato:

http://hostname/taxonomy_slug/taxonomy_term

Questo significa che spesso potremmo creare il template correttamente come

taxonomy-taxonomy_slug-taxonomy_term.php

Ma il modo giusto di usarlo è aspettarselo all'interno dell'URL

http://hostname/taxonomy_slug/taxonomy_term

Per visualizzare l'URL corretto per la tassonomia, possiamo usare

get_the_term_list($post->ID,'taxonomy_slug')

E testare dove punterà il link.

24 lug 2013 04:31:35
1

La Gerarchia dei Template di WordPress fornisce il file template esatto di cui hai bisogno: taxonomy-{taxonomy}-{term}.php.

Quindi, per creare un template personalizzato per il termine cameras della tassonomia equipment_types, dovresti creare un file chiamato taxonomy-equipment_types-cameras.php.

(Nota, puoi anche creare un file template per la tassonomia stessa; basta omettere lo slug del {term}: taxonomy-{taxonomy}.php, oppure taxonomy-equipment_types.php nel tuo caso.)

Puoi mostrare contenuti in modo condizionale basandoti sulla gerarchia interrogando il genitore del termine, tramite le proprietà dell'oggetto restituito da get_term(), oppure i figli del termine, tramite get_term_children().

8 dic 2012 14:39:54
Commenti

Grazie Chip, pensavo che il template WP fornisse ciò di cui avevo bisogno come suggerivi: taxonomy-equipment_types.php

Credo che il punto in cui ho difficoltà sia capire come mostrare i contenuti/post in base ai termini selezionati dall'utente sia per i termini genitore che figlio, come cameras o cameras-a.

Stai suggerendo di usare 'get_term()' per determinare quali contenuti/post dovrebbero essere mostrati nel loop?

Sono abbastanza nuovo con PHP e sto attualmente imparando attraverso Lynda.com. Quindi dovrò approfondire un po' e cercare di capire il processo.

Potresti fornire un esempio approssimativo per aiutarmi a capire cosa devo fare?

user1833715 user1833715
8 dic 2012 15:10:52
0

Ho avuto un problema simile. Il problema con le risposte sopra è che richiedono tutte di specificare il CPT, la tassonomia o il termine.

Se - come hai indicato - vuoi recuperare queste informazioni dinamicamente in base alla pagina CPT su cui si trova l'utente, puoi provare il seguente codice (che funziona per me), che mostra tutte le tassonomie per il current custom post type.

(originariamente da questo post con l'aiuto di GhostToast)

<?php get_header(); ?>
  <div id="content">
<div id="main">

  <ul>

<? // Inizia la query degli archivi dei termini tassonomici
$post_type = get_post_type(); // trova il nome del CPT
$taxonomies = get_object_taxonomies($post_type); // Trova le tassonomie
if($taxonomies){
foreach($taxonomies as $taxonomy){
// vogliamo solo gerarchiche - niente tag per favore
if(is_taxonomy_hierarchical($taxonomy)){

    $terms = get_terms($taxonomy, array(
'orderby'       => 'name', 
'order'         => 'Asc',
'hide_empty'    => true )); 

 foreach ( $terms as $term ) {  


// esempio di output sotto ?>

<li>

 <h1><a href="<?php echo get_term_link($term->slug, $taxonomy); ?> "><? echo $term->name; ?></a></h1>

   <div class="imgBox">

     <a href="<?php echo get_term_link($term->slug, $taxonomy); ?> " title="<? echo $term->name; ?>" >
     <img src="<?php echo get_template_directory_uri(); ?>/timthumb.php?src=/library/images/dingy-placeholder.png&amp;h=196&amp;w=285&amp;zc=1" alt="<?php the_title(); ?>" /></a>
   </div>

           <div class="the-excerpt">
            <a href="<?php echo get_term_link($term->slug, $taxonomy); ?> "><? echo $term->description; //puoi aggiungere questo nell'admin ?> - clicca per vedere di più</a>
            </div>
 </li>
        <?  

   }
 }
}
}?>

     </ul>


<?php wp_reset_query(); ?>

     </div> <!-- fine #main -->
   </div> <!-- fine #content -->

 <?php get_footer(); ?>

Salva il codice sopra in un file chiamato qualcosa come archive-mycpt.php, poi in archive.php aggiungi questo dopo la chiamata header;

<?php get_header(); ?>

<?php  // è uno dei nostri CPT? Se sì, indirizza alla pagina di archivio custom 
  if ( is_custom_post_type() ){ 
include (TEMPLATEPATH . '/archive-mycpt.php'); 

        // altrimenti continua...

    } else {  ?>

               <!-- contenuto di archive.php   -->

   <? } ?>
27 lug 2013 05:13:40