Ottenere il primo termine di un post
Come posso ottenere solo il primo termine di un custom post type.
Posso ottenerli tutti - nessun problema. Questo è quello che sto usando per recuperarli tutti
<?php foreach ($terms as $term) {echo '<a href="'.get_term_link($term->slug, 'sitecat').'">'.$term->name.'</a>,';} ?> >> <a href="<?php the_permalink(); ?>"><?php the_title('', ''); ?></a></h2></span>
Apprezzerei una risposta utilizzando il mio codice, ma qualsiasi aiuto è ben accetto

Non sono sicuro di cosa intendi con 'prima' tassonomia... ma,
$terms = get_the_terms( $post->ID, 'mytaxonomy' );
restituisce un array di oggetti dei termini della tassonomia, quindi
$term = array_pop($terms);
ti darebbe il primo termine nell'array. E poi:
echo '<a href="'.get_term_link($term->slug, 'mytaxonomy').'">'.$term->name.'</a>,'
(Potresti voler includere alcune istruzioni if, nel caso venga restituito un array vuoto o un errore (vedi is_wp_error
)

ok.. l'errore era dalla mia parte - non nella tua risposta ;) grazie mille amico

array_pop rimuoverà e restituirà l'elemento ultimo dell'array. Usa array_shift per ottenere il primo elemento. Nota che entrambe queste funzioni ridurranno l'array originale.

A partire da PHP 5.4, puoi direttamente dereferenziare un array, quindi per ottenere il primo termine, puoi semplicemente fare:
$first_term = get_the_terms( $post->ID, 'TAXONOMY_NAME' )[0];
var_dump( $first_term );
Se hai bisogno di una proprietà specifica (ad esempio il nome del termine) del primo termine, puoi fare quanto segue:
$first_term_name = get_the_terms( $post->ID, 'TAXONOMY_NAME' )[0]->name;
var_dump( $first_term_name );
MODIFICA
Nota che questo approccio ha i suoi svantaggi perché otterrai un oggetto WP_Error
se la tassonomia non è valida. Inoltre, se l'array restituito è vuoto, riceverai anche un avviso di chiave di array non definita, quindi usa questa soluzione con cautela.

Per riassumere tutte le risposte precedenti, ecco il gist helper che utilizzo. Esegue tutti i controlli necessari e accetta gli stessi argomenti della funzione get_the_terms().
function getTheFirstTerm($post, $taxonomy) {
$post = get_post( $post );
if ( ! $post ) {
return false;
}
$terms = get_the_terms( $post->ID, $taxonomy );
if (!empty($terms) && !is_wp_error( $terms )) {
//questa riga restituisce effettivamente il primo termine disponibile se presente.
return $terms[0];
}
return false;
}
Nota aggiuntiva. Questa funzione, per semplicità e per soddisfare le esigenze nella maggior parte dei miei casi, restituisce solo l'oggetto termine o false. Puoi comunque restituire WP_Error se nel flusso hai bisogno di verificarlo, ad esempio:
if (!empty($terms)) {
if(!is_wp_error( $terms )) {
//questa riga restituisce effettivamente il primo termine disponibile se presente.
return $terms[0];
} else {
return $terms; //Questo restituisce l'oggetto WP_Error
}
}
Inoltre, puoi ordinare i termini prima di restituire il primo, ad esempio per ottenere il primo oggetto termine per term_id, slug, nome, ordine del menu e così via.

Cosa ha "funzionato per te"? Nota a margine: il break;
interromperà davvero la tua istruzione, l'unset
non verrà mai attivato e solo il primo elemento verrà elaborato.

unset( $term );
dovrebbe essere dopo il tuo ciclo foreach
, e non all'interno di esso :-)
