Ottenere il nome della tassonomia del post corrente
Tassonomia gerarchica del custom post type 'projects' > 'projects_category'.
Due esempi di gerarchie 'projects_category' sarebbero:
Grandi Aziende > 1° Nome Azienda > Un Titolo Post
Piccole Imprese > 2° Nome Azienda > Un Altro Titolo Post
Posso ottenere '1° Nome Azienda' con il seguente codice:
<?php $terms = get_the_terms($post->ID, 'projects_category');foreach($terms as $term){echo $term->name;} ?>
Come posso visualizzare 'Grandi Aziende' o 'Piccole Imprese' a seconda del caso in single.php?
get_ancestors() dovrebbe fare ciò che ti serve:
Quindi, dovresti fare qualcosa come questo:
$ancestors = get_ancestors($term_id, 'projects_category)
Ma la funzione get_ancestors() funziona con i custom post type? A me non sembra funzionare...
Andy
La tua domanda in realtà non riguarda i CPT - riguarda le tassonomie personalizzate. Inoltre, verifica di avere WP 3.1 o superiore
anu
Ho l'ultima versione di WP 3.2.1. Ho specificato che si tratta di custom post type nel primo paragrafo della mia domanda, ma forse è più una questione di tassonomie personalizzate? In ogni caso la risposta ci sfugge ancora.
Andy
Potresti stare utilizzando CPT, ma quello che stai cercando è un modo per attraversare una gerarchia di tassonomie personalizzate - ecco cosa sono i 'termini' - elementi in una tassonomia che puoi associare a un oggetto post (che sia un post normale, una pagina o un tipo di post personalizzato)
anu
Ho provato questo <?php get_ancestors( $post->ID, 'projects_category' ); ?> ma non ha restituito nulla. Puoi approfondire la tua risposta?
Andy
Ho aggiunto un esempio di utilizzo nella mia risposta - stai usando l'ID del post, quando dovresti usare l'ID del termine. Questa è una tassonomia, non un post personalizzato.
anu
Quindi funzionerà in single.php? Quando ho provato non sembra produrre nulla. Come ho detto nella mia domanda, ho bisogno di questo nel template single, non in quello della tassonomia.
Andy
@anu continuiamo questa discussione nella chat
Andy
Non ha nulla a che fare con il template che stai usando. Ottieni l'ID del termine che ti interessa e passalo a get_ancestors. Il codice che hai postato nella tua domanda ottiene il nome del termine, quindi prendi l'ID del termine da quello e usalo come input per get_ancestors. Stai cercando di trovare il termine genitore. Non il post genitore. Non sono sicuro di come renderlo più chiaro.
anu
Grazie per aver cercato di spiegare, ancora non funziona ma intendi qualcosa del genere: <?php $term = wp_get_post_terms( $post->ID, 'projects_category' ); $term_id = $term[0]->name; $ancestors = get_ancestors($term_id, 'projects_category'); echo $ancestors; ?>
Andy
Attualmente solo il mio termine di tassonomia di livello secondario (1st Company Name) è 'selezionato' nell'area di amministrazione. Anche il mio termine di tassonomia di livello superiore (Big Corporates) deve essere 'selezionato' nel pannello di amministrazione per poter essere recuperato in questo modo?
Andy
Quando entrambi sono selezionati, get_ancestors restituisce sia la categoria che la categoria genitore in ordine alfabetico. C'è un modo per estrarre i nomi delle categorie dai livelli superiori e inferiori separatamente? In modo che uno possa essere inserito in un H1 e l'altro in un H2.
Andy
Se leggi questo articolo sui tipi di contenuto personalizzati ti sarà utile: Ripassando Tipi di Contenuto Personalizzati, Tassonomie Personalizzate e Permalink
Non è stato d'aiuto, non ho visto nulla che mostrasse come ottenere il nome della tassonomia principale nel template del singolo post. Nei commenti ci sono persone che chiedono come farlo ma nessuna soluzione è stata pubblicata. Penso che non sia facilmente ottenibile per un custom post type.
Andy
Ho evidenziato la risposta di anu e la spiegazione di get_ancestors, comunque ecco come ho risolto:
<?php
$terms = wp_get_object_terms($post->ID, 'projects_category', array('orderby' => 'term_id', 'order' => 'ASC') );
if ( !empty( $terms ) ) :
$project = array();
foreach ( $terms as $term ) {
$project[] = $term->name;
}
echo '<h1>'.$project[0].'</h1>';
echo '<h2>'.$project[1].'</h2>';
endif;
?>