Obține ID-ul Categoriei în interiorul șablonului de Categorie

29 mai 2011, 21:41:37
Vizualizări: 88.6K
Voturi: 27

Cum pot obține ID-ul categoriei în interiorul Șablonului. Foarte important: Nu pot face acest lucru după nume, deoarece avem mai multe categorii cu același nume. Doar slug-ul este diferit. Ar fi în regulă și dacă aș putea obține slug-ul. Dar după cum am spus: Nu pot folosi titlul categoriei.....

0
Toate răspunsurile la întrebare 9
0
43

$wp_query->get_queried_object() vă va oferi "obiectul curent interogat". Pe o pagină de arhivă de categorii acesta este obiectul categoriei, pe o pagină de autor acesta este autorul, pe un articol singular acesta este articolul în sine... ei bine, înțelegeți ideea. Dacă doriți doar ID-ul, puteți folosi și $wp_query->get_queried_object_id().

29 mai 2011 23:06:39
1
20

pe baza căutării mele, trebuie să folosești acest cod:

$category = get_queried_object();
echo $category->term_id;
4 feb. 2017 10:45:53
Comentarii

Presupun că ai primit votul negativ pentru că nu explici de ce ajută, ci doar afirmi că funcționează. Ai putea să inspectezi sursa acelei funcții și să adaugi concluziile tale ca edit la răspunsul tău. Sfat: Dacă un comentariu trebuie să fie mai lung decât răspunsul tău, atunci ar fi trebuit să fie un comentariu :)

kaiser kaiser
4 feb. 2017 14:44:58
1

Încă nu pot comenta, dar răspunsul lui VicePrez funcționează. Următorul cod funcționează perfect pe o pagină de arhivă de categorii (deși probabil vei dori să faci altceva decât doar să-l afișezi):

<?php
$category = get_the_category(); 
echo $category[0]->cat_ID;
?>

EDIT: Revoc asta, a funcționat pentru mine până când am dat peste o categorie care nu avea niciun post, apoi a preluat subcategoria în locul categoriei principale. Nu poți conta pe get_the_category pe o pagină de șablon de categorie.

1 iul. 2011 15:53:16
Comentarii

Aceasta nu este o soluție viabilă deoarece returnează toate categoriile pentru toate articolele de pe acea pagină de categorie. Rezultatul afișat returnează categoria inițială a celui mai recent articol din listă.

cj5 cj5
21 nov. 2017 19:34:51
0

Dacă nu înțeleg greșit întrebarea, cred că poți adăuga și ID-ul/slug-ul categoriei în clasa body:

<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>
30 mai 2011 01:51:48
0

Răspunsul lui @Jan Fabry este de fapt răspunsul corect, iată de ce: Deoarece WordPress permite mai multe categorii pentru un articol, folosirea $category = get_the_category() și interogarea $category[0] nu va funcționa în toate cazurile, deoarece ceea ce faci de fapt este să ceri prima categorie a primului articol. Imaginează-ți că ai categoriile A, B și C. Dacă ai un singur articol, care are categoriile A și B, și te afli pe pagina categoriei B, s-ar putea să obții informațiile categoriei A în loc de B.

De aceea este mai bine să folosești $category = $wp_query->get_queried_object(), deoarece în exemplul anterior, acesta va întotdeauna să-ți ofere informațiile categoriei B când te afli pe pagina categoriei B.

12 iul. 2011 20:26:34
3

Poți folosi funcția get_the_category() pentru a face asta.

Exemplu:

<?php

$category = get_the_category(); 

// folosește aceasta pentru a afișa slug-ul
echo $category[0]->slug;

// folosește aceasta pentru a afișa ID-ul categoriei
echo $category[0]->cat_ID;

// dacă ai mai multe categorii, poți folosi un foreach, astfel:
foreach ( $category as $cat ) :

    echo '<li>' . $cat->name . '</li>';

endforeach;

?>

Poți folosi:

<?php
    echo '<pre>';
    print_r($category);
    echo '</pre>';
?>

pentru a vizualiza array-ul de obiecte returnate.

29 mai 2011 22:51:19
Comentarii

întrebarea 'cum obțin ID-ul categoriei în interiorul șablonului' este deschisă la diferite interpretări. în interiorul unui șablon de postare individuală, ai dreptate. funcționează în interiorul buclei pentru a obține categoriile unei singure postări; totuși, get_the_category() nu va funcționa pe o pagină de arhivă a categoriei pentru a obține ID-ul categoriei, rezultatul ar fi arbitrar.

Michael Michael
30 mai 2011 00:00:40

@Michael corect spus. @Jan pare să fi oferit un răspuns mai potrivit în legătură cu acel context specific.

VicePrez VicePrez
30 mai 2011 00:16:40

get_the_category() funcționează în interiorul category.php

Lea Cohen Lea Cohen
5 iul. 2011 11:19:24
1
$category = get_category( get_query_var( 'cat' ) ); // Obține categoria curentă pe baza variabilei de interogare

$cat_id = $category->cat_ID; // Obține ID-ul categoriei

$catname=explode(",",get_category_parents($cat_id,'',',')); // Desparte ierarhia categoriilor părinte într-un array folosind virgula ca separator
print_r($catname); // Afișează array-ul cu numele categoriilor
11 ian. 2013 13:20:26
Comentarii

Te rog să explici de ce aceasta ar putea rezolva problema. Un fragment de cod nu este un răspuns.

fuxia fuxia
11 ian. 2013 14:38:24
0

Majoritatea exemplelor de mai sus funcționează, dar dacă utilizați mai multe categorii, NICIUNUL (la momentul scrierii, versiunea WP 3.6) dintre celelalte metode nu funcționează pentru a obține toate categoriile care au fost transmise fie prin "cat", fie prin "category_name".

Acesta este tipul de URL de arhivă cu mai multe categorii: https://siteultau.com/categorie/albastru+galben/ (da, acest tip de URL funcționează pe orice site WordPress, dar nu este folosit prea des)

Singura metodă pe care am găsit-o este să extrag datele din:

$wp_query->query['category_name']

Din anumite motive, aceasta returnează o valoare diferită față de get_query_var( 'category_name' ), care returnează doar prima categorie.

Când utilizați mai multe categorii, va trebui să folosiți o funcție precum explode pentru a obține un array de slug-uri de categorii, apoi să parcurgeți acel array pentru a obține toate ID-urile:

<?php
global $wp_query;

//extrage toate categoriile din șirul de interogare (dacă folosești `category_name`)
$category_slugs_array = explode("+",esc_attr($wp_query->query['category_name']));

$categories = array();
$category_ids = array();

//parcurge toate slug-urile
foreach($category_slugs_array as $category_slug)
{
    //obține obiectul categoriei folosind slug-ul
    $category = get_category_by_slug( $category_slug );

    //verifică dacă a fost găsită o categorie corespunzătoare
    if(isset($category->cat_ID))
    {
        $categories[] = $category;
        $category_ids[] = $category->cat_ID;
    }
}

var_dump($categories); //array de categorii
var_dump($category_ids); //array de ID-uri de categorii

?>

Evident, trebuie să ții cont de operatorii AND (+) sau OR (,) atunci când îi utilizezi.

23 sept. 2013 13:37:15
0
add_action( 'loop_start', 'demo_cat_id' );
function demo_cat_id() {

$terms = get_the_terms( get_queried_object_ID(), 'category' );

$term = array_pop( $terms );

echo $term->term_id;

}

De asemenea, poți folosi get_the_terms în interiorul template-ului tău de arhivă sau în fișierul de funcții și poți utiliza al doilea parametru pentru a specifica taxonomia ca fiind o categorie.

10 ian. 2022 08:12:35