Ottenere il primo termine di un post

10 mar 2012, 03:13:27
Visualizzazioni: 32.8K
Voti: 11

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

0
Tutte le risposte alla domanda 5
2
30

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)

10 mar 2012 04:05:35
Commenti

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

Sagive Sagive
16 mar 2012 22:34:17

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.

fonpacific fonpacific
23 ott 2024 11:26:16
1

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.

28 lug 2015 11:16:29
Commenti

Come potrei ottenere tutti gli ID dei termini per ogni post da utilizzare nell'archivio della pagina home @pieter-goosen

Brad Dalton Brad Dalton
9 gen 2022 07:55:14
1

Che ne dici di accedere direttamente alla chiave dell'oggetto?

$terms = get_the_terms( $post->ID, 'sitecat' );
$first_term = $terms[0];

In questo modo puoi accedere all'oggetto.

echo $first_term->name;
28 lug 2015 11:06:00
Commenti

È meglio verificare che questo indice esista, ma funziona ;)

Sagive Sagive
9 giu 2021 17:54:33
2

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.

11 nov 2021 02:44:03
Commenti

Grazie per la tua risposta j.w. ;)

Sagive Sagive
11 nov 2021 02:55:40

Potresti indicare nel tuo codice quale parte restituisce il primo termine, così che altri utenti possano fare riferimento in modo efficace.

西門 正 Code Guy - JingCodeGuy 西門 正 Code Guy - JingCodeGuy
11 nov 2021 10:59:49
3

Ha funzionato per me. Restituisce solo la prima categoria come testo, senza ancoraggio.

$terms = get_the_terms( $post->ID , 'your_custom_taxonomy' ); 
foreach( $terms as $term ) { 
    print $term->name;
    break;
    unset($term);
}
4 mar 2014 14:23:08
Commenti

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.

kaiser kaiser
4 mar 2014 14:57:27

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

Pieter Goosen Pieter Goosen
28 lug 2015 11:18:11

Questo non funzionerà se i termini restituiti sono WP_Error.

J. Wrong J. Wrong
11 nov 2021 02:40:45