Obține ID-ul Categoriei în interiorul șablonului de Categorie
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.....

$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()
.

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 :)

Î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.

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.

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.

î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 corect spus. @Jan pare să fi oferit un răspuns mai potrivit în legătură cu acel context specific.

$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

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.

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.
