Template di archivio per i termini della tassonomia
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.

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.

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()
.

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?

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&h=196&w=285&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 -->
<? } ?>
