Yanıtlar:
$wp_query->get_queried_object()
"şu anda sorgulanan nesneyi" size verecek. Bir kategori arşivinde bu kategori nesnesidir, bir yazar sayfasında bu yazar, tek bir yayında bu yazının kendisidir ... ... iyi, fikrini anladın. Sadece kimliği istiyorsanız, kullanabilirsiniz $wp_query->get_queried_object_id()
.
benim aramaya dayanarak şunu kullanmalısın:
$category = get_queried_object();
echo $category->term_id;
Henüz yorum yapamam, ama VicePrez'in cevabı işe yarıyor. Aşağıdakiler bir kategori arşiv sayfasında gayet iyi çalışıyor (muhtemelen sadece echo'dan başka bir şey yapmak istemeseniz de):
<?php
$category = get_the_category();
echo $category[0]->cat_ID;
?>
EDIT: Kazıyın, yazı olmayan bir kategoriye rastlayana kadar benim için işe yaradı, sonra ana kategori yerine alt kategoriyi aldı. Kategori şablonu sayfasındaki get_the_category belgesine güvenemezsiniz .
Soruyu yanlış anlamadığım sürece, vücut sınıfı için id / slug kategorisini de ekleyebileceğinizi düşünüyorum:
<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>
@Jan Fabry'nin cevabı aslında doğru cevaptır, işte neden: Wordpress bir gönderi için birden fazla kategoriye izin verdiğinden, gerçekte yaptığınız ilk yazı için ilk kategori istediğinden, her durumda kullanmanız $category = get_the_category()
ve sorgulamanız $category[0]
işe yaramayacaktır. A, B ve C kategorileri olduğunu hayal edin. Yalnızca bir gönderiniz varsa, A ve B kategorileri vardır ve B'nin kategori sayfasındasınız, bunun yerine A'nın bilgisine sahip olabilirsiniz.
Bu yüzden kullanmak daha iyidir $category = $wp_query->get_queried_object()
, çünkü önceki örnekte, B'nin kategori sayfasında bulunduğunuzda daima B'nin bilgisini alacaksınız.
Bunu get_the_category()
yapmak için kullanabilirsiniz .
Örnek:
<?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;
?>
Kullanabilirsin:
<?php
echo '<pre>';
print_r($category);
echo '</pre>';
?>
döndürülen nesnelerin dizisini görüntülemek için
get_the_category()
kategori kimliğini almak için bir kategori arşiv sayfasında çalışmayacak, sonuç keyfi olacaktır.
get_the_category()
category.php içinde çalışıyor
$category = get_category( get_query_var( 'cat' ) );
$cat_id = $category->cat_ID;
$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);
Yukarıdaki örneklerin çoğu çalışır ancak diğer yöntemlerin NONE (yazma, WP sürüm 3.6'dan itibaren) birden fazla kategorisini kullanıyorsanız , "cat" veya "category_name" ya geçirilen tüm kategorileri elde etmek için çalışır.
Bulduğum tek yol, veriyi ondan çekmektir:
$wp_query->query['category_name']
Nedense bu, get_query_var( 'category_name' )
yalnızca ilk kategoriyi döndüren farklı bir değer döndürür.
Birden fazla kategori kullanırken explode
, bir kategori sümüklü böcek dizisi elde etmek gibi bazı işlevler kullanmanız gerekir , daha sonra tüm ID'leri almak için bu döngüyü kullanın:
<?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
?>
Açıkçası, AND (+) veya OR (,) operatörlerini kullanırken bazı hususlar olması gerekir.