Odpowiedzi:
$wp_query->get_queried_object()
da ci „aktualnie poszukiwany obiekt”. W archiwum kategorii jest to obiekt kategorii, na stronie autora jest to autor, na pojedynczym poście jest to sam post, ... cóż, masz pomysł. Jeśli chcesz tylko identyfikatora, możesz go również użyć $wp_query->get_queried_object_id()
.
w oparciu o moje wyszukiwanie musisz użyć tego:
$category = get_queried_object();
echo $category->term_id;
Umm, nie mogę jeszcze komentować, ale odpowiedź VicePreza działa. Poniższe działa dobrze na stronie archiwum kategorii (chociaż prawdopodobnie chcesz zrobić coś innego niż tylko echo):
<?php
$category = get_the_category();
echo $category[0]->cat_ID;
?>
EDYCJA: Zdrap to, działało dla mnie, dopóki nie natknąłem się na kategorię, która nie miała postu, a następnie podniosła podkategorię zamiast głównej kategorii. Nie można polegać na get_the_category na stronie szablonu kategorii .
Chyba, że nie rozumiem pytania, myślę, że możesz również dodać identyfikator kategorii / ślimak do klasy ciała:
<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>
Odpowiedź @Jana Fabry'ego jest właściwie prawidłową odpowiedzią, oto dlaczego: Ponieważ Wordpress zezwala na wiele kategorii postów, używanie $category = get_the_category()
i tworzenie zapytań $category[0]
nie będzie działać w każdym przypadku, ponieważ tak naprawdę pytasz o pierwszą kategorię pierwszego postu. Wyobraź sobie, że masz kategorie A, B i C. Jeśli masz tylko jeden post, ma on kategorie A i B i znajdujesz się na stronie kategorii B, zamiast tego możesz uzyskać informacje A.
Dlatego lepiej jest używać $category = $wp_query->get_queried_object()
, ponieważ w poprzednim przykładzie zawsze dostaniesz informacje B, gdy jesteś na stronie kategorii B.
Możesz to get_the_category()
zrobić.
Przykład:
<?php
$category = get_the_category();
// use this to echo the slug
echo $category[0]->slug;
// use this to echo the cat id
echo $category[0]->cat_ID;
// if you've got multiple categories you can run a foreach loop like so
foreach ( $category as $cat ) :
echo '<li>' . $cat->name . '</li>';
endforeach;
?>
Możesz użyć:
<?php
echo '<pre>';
print_r($category);
echo '</pre>';
?>
aby wyświetlić tablicę zwracanych obiektów.
get_the_category()
nie będzie działać na stronie archiwum kategorii, aby uzyskać identyfikator kategorii, wynik byłby dowolny.
get_the_category()
działa wewnątrz category.php
$category = get_category( get_query_var( 'cat' ) );
$cat_id = $category->cat_ID;
$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);
Większość powyższych przykładów działa, ale jeśli używasz wielu kategorii BRAK (w chwili pisania, WP wersja 3.6), inne metody działają, aby uzyskać wszystkie kategorie, które zostały przekazane do „cat” lub „nazwa_kategorii”.
Znalazłem tylko sposób, aby pobrać dane z:
$wp_query->query['category_name']
Z jakiegoś powodu zwraca inną wartość, do get_query_var( 'category_name' )
której zwraca tylko pierwszą kategorię.
Podczas korzystania z wielu kategorii będziesz musiał użyć funkcji, np. explode
Uzyskać tablicę informacji o kategorii, a następnie przejrzyj ją, aby pobrać wszystkie identyfikatory:
<?php
global $wp_query;
//grab all categories from query string (if using `category_name`)
$category_slugs_array = explode("+",esc_attr($wp_query->query['category_name']));
$categories = array();
$category_ids = array();
//loop through all the slugs
foreach($category_slugs_array as $category_slug)
{
//get category object using slug
$category = get_category_by_slug( $category_slug );
//check to make sure a matching category has been found
if(isset($category->cat_ID))
{
$categories[] = $category;
$category_ids[] = $category->cat_ID;
}
}
var_dump($categories); //array of categories
var_dump($category_ids); //array of category IDs
?>
Oczywiście, należy wziąć pod uwagę pewne uwagi podczas korzystania z operatorów AND (+) lub OR (,).