Obține primul termen al postării

10 mar. 2012, 03:13:27
Vizualizări: 32.8K
Voturi: 11

Cum pot obține doar primul termen dintr-un tip de postare personalizat.
Pot să le obțin pe toate - fără probleme. Iată ce folosesc pentru a le extrage pe toate:

<?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>

Aș aprecia un răspuns folosind codul meu, dar orice ajutor este binevenit

0
Toate răspunsurile la întrebare 5
2
30

Nu sunt sigur ce înțelegi prin prima taxonomie... dar,

$terms = get_the_terms( $post->ID, 'mytaxonomy' );

returnează un array de obiecte ale termenilor de taxonomie, deci

$term = array_pop($terms);

ar oferi primul termen din array. Și apoi:

echo '<a href="'.get_term_link($term->slug, 'mytaxonomy').'">'.$term->name.'</a>,'

(S-ar putea să dorești să incluzi câteva instrucțiuni if, în cazul în care este returnat un array gol sau o eroare (vezi is_wp_error)

10 mar. 2012 04:05:35
Comentarii

ok.. eroarea a fost de partea mea - nu răspunsul tău ;) mulțumesc mult, prietene

Sagive Sagive
16 mar. 2012 22:34:17

array_pop va elimina și va returna ultimul element din array. Folosește array_shift pentru a obține primul element. Reține că ambele funcții vor scurta array-ul original.

fonpacific fonpacific
23 oct. 2024 11:26:16
1

Începând cu PHP 5.4, puteți dereferenția direct un array, astfel încât pentru a obține primul termen, puteți face simplu.

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

Dacă aveți nevoie de o proprietate specifică (de exemplu, numele termenului) al primului termen, puteți face următoarele

$first_term_name = get_the_terms( $post->ID, 'TAXONOMY_NAME' )[0]->name;
var_dump( $first_term_name );

EDIT

Doar o notă, acest lucru are și dezavantajele sale deoarece veți primi un obiect WP_Error dacă taxonomia este invalidă. De asemenea, dacă array-ul returnat este gol, veți primi și o avertizare de cheie de array nedefinită, așa că folosiți acest lucru cu grijă.

28 iul. 2015 11:16:29
Comentarii

Cum aș putea obține toate ID-urile de termeni pentru fiecare post, pentru a le utiliza în arhiva paginii de acasă @pieter-goosen

Brad Dalton Brad Dalton
9 ian. 2022 07:55:14
1

ce zici de accesarea directă a cheii unui obiect?

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

astfel poți accesa obiectul.

echo $first_term->name;
28 iul. 2015 11:06:00
Comentarii

Este mai bine să verifici dacă acest index există, dar merge și așa ;)

Sagive Sagive
9 iun. 2021 17:54:33
2

Pentru a rezuma toate răspunsurile anterioare, iată un fragment de cod helper pe care îl folosesc. Efectuează toate verificările necesare și acceptă aceleași argumente ca și funcția 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 )) {
        // Această linie returnează efectiv primul termen disponibil dacă există.
        return $terms[0];
    }

    return false;
}

Notă suplimentară. Această funcție, pentru simplitate, returnează doar obiectul termenului sau false, ceea ce este necesar în majoritatea cazurilor mele. Puteți totuși returna WP_Error dacă aveți nevoie să verificați acest lucru în fluxul de execuție, de exemplu:

if (!empty($terms)) {
   if(!is_wp_error( $terms )) {
       // Această linie returnează efectiv primul termen disponibil dacă există.
       return $terms[0];
   } else {
       return $terms; // Acest lucru returnează obiectul WP_Error
   }       
}

Mai mult, puteți sorta termenii înainte de a returna primul, astfel încât să obțineți primul obiect termen după term_id, slug, name, menu order și așa mai departe.

11 nov. 2021 02:44:03
Comentarii

Mulțumesc pentru răspuns, j.w. ;)

Sagive Sagive
11 nov. 2021 02:55:40

Poți să indici în codul tău care parte returnează primul termen, astfel încât alți utilizatori să se poată referi la el eficient.

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

A funcționat pentru mine. Afișează doar prima categorie ca text, fără anchor.

$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
Comentarii

Ce "a funcționat pentru tine"? Notă laterală: break; va într-adevăr opri execuția instrucțiunii, unset nu va fi niciodată declanșat și doar primul element va fi procesat.

kaiser kaiser
4 mar. 2014 14:57:27

unset( $term ); ar trebui să fie după bucla ta foreach, și nu în interiorul ei :-)

Pieter Goosen Pieter Goosen
28 iul. 2015 11:18:11

Aceasta nu va funcționa dacă termenii returnați sunt WP_Error.

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