Cum să obții slug-ul sau titlul unei categorii din ID-ul acesteia în WordPress

6 iul. 2013, 22:16:52
Vizualizări: 17K
Voturi: 2

Am un câmp personalizat configurat care returnează ID-ul unei categorii selectate. Doresc să folosesc acest ID de categorie pentru a afișa, într-un caz: slug-ul categoriei, iar în alt caz: titlul categoriei.

Câmpul este apelat simplu astfel: <?php the_field('category_test'); ?> și returnează ID-ul, în acest caz 4.

Este posibil să folosesc acest câmp pentru a returna slug-ul categoriei și, de asemenea, pentru a returna titlul categoriei? Nu sunt sigur cum sau dacă acest lucru poate fi realizat. Orice sugestii ar fi foarte apreciate!

0
Toate răspunsurile la întrebare 1
6

get_category va returna toate informațiile necesare pentru ambele cazuri.

$catinfo = get_category(get_field('category_test'));

Din Codex, asta va oferi (date exemplificative evident):

stdClass Object
(
    [term_id] => 85
    [name] => Nume Categorie
    [slug] => nume-categorie
    [term_group] => 0
    [term_taxonomy_id] => 85
    [taxonomy] => category
    [description] => 
    [parent] => 70
    [count] => 0
    [cat_ID] => 85
    [category_count] => 0
    [category_description] => 
    [cat_name] => Nume Categorie
    [category_nicename] => nume-categorie
    [category_parent] => 70
)

Sunt destul de sigur că get_field este corect.

get_category funcționează corect pentru orice ID de categorie pe care l-am încercat și returnează NULL pentru ID-uri de categorii invalide, dar conform discuției de mai jos, get_field poate returna un array. Când se întâmplă acest lucru, get_category pare să returneze prima categorie din baza de date după ID, care implicit este categoria uncategorized. Acest lucru poate fi demonstrat cu următoarele:

var_dump(get_category(array(8,9,10)));

Prin urmare, pentru a compensa, va trebui să folosiți:

$cat_field = get_field('category_test');
if (is_array($cat_field)) {
  $cat_field = $cat_field[0];
}
$catinfo = get_category($cat_field);

Pentru a obține orice câmp specific, folosiți sintaxa standard de obiect. De exemplu:

echo $catinfo->slug;

Sau

$cname = $catinfo->name;
6 iul. 2013 22:27:45
Comentarii

ah asta aproape funcționează, deși din nu știu ce motiv returnează un array pentru categoria Necategorizat, chiar dacă ID-ul transmis aparține unei alte categorii?

user1374796 user1374796
7 iul. 2013 04:32:16

ACF poate returna un array de valori în special când folosești câmpuri de taxonomie. Probabil ai nevoie să folosești ceva de genul $category = get_field('category_test'); și apoi $catinfo = get_category( $category[0] );

RRikesh RRikesh
7 iul. 2013 09:17:51

@RRikesh Se pare că asta nu returnează nimic? Metoda de mai sus returnează un array, dar nu pentru categoria corectă, afișând doar Necategorizat din nu știu ce motiv.

user1374796 user1374796
7 iul. 2013 12:27:51

@RRikesh Am încercat și function get_cat_slug($cat_id) { $cat_id = (int)$cat_id; $category = &get_category($cat_id); return $category->slug; } în functions.php și <?php echo get_cat_slug(get_field('category_test')); ?> în pagina de test, dar chiar dacă câmpul category_test returnează ID-ul 4, slug-ul returnat este din nou cel al categoriei necategorizate :(

user1374796 user1374796
7 iul. 2013 12:30:24

@s_ha_dum
ah, asta aproape că funcționează, dar din anumite motive returnează un array pentru categoria Necategorizate, chiar dacă ID-ul transmis este din altă categorie?

user1374796 user1374796
7 iul. 2013 12:31:42

@user1374796 : vezi modificarea

s_ha_dum s_ha_dum
7 iul. 2013 18:07:30
Arată celelalte 1 comentarii