Kategori şablonunda Kategori Kimliği al


22

Şablonun içindeki kedi kimliğini nasıl alabilirim. Çok önemli: İsimle yapamam çünkü aynı isme sahip birden fazla kedi var. Sadece sümüklü böcek farklı. Sümüklü böcek alırsam, sorun olmazdı. Ama dediğim gibi: Cat başlığını kullanamıyorum .....

Yanıtlar:


40

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


9

benim aramaya dayanarak şunu kullanmalısın:

$category = get_queried_object();
echo $category->term_id;

Sana değil çünkü downvote almış varsayalım açıklayan yardımcı olur neden sadece bunu yapar belirten. Bu işlevin kaynağını incelemek ve çıktılarınızı cevabınıza düzenleme olarak eklemek isteyebilirsiniz. İpucu: Bir yorumun cevabınızdan daha uzun olması gerekiyorsa, o zaman bir yorum olmalı :)
kaiser

7

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 .


Bu geçerli bir çözüm değildir, çünkü bu kategori sayfasındaki tüm gönderiler için tüm kategorileri döndürür. Yankılı sonucunuz listedeki en son gönderinin ilk kategorisini döndürür.
cj5 21:17

4

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); ?>>

4

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


2

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


'Şablon içindeki kedi kimliğini nasıl edinebilirim' sorusu farklı yorumlara açık. tek bir gönderi şablonunda haklısınız. tek bir gönderinin kategorilerini almak için döngü içinde çalışır; Ancak, get_the_category()kategori kimliğini almak için bir kategori arşiv sayfasında çalışmayacak, sonuç keyfi olacaktır.
Michael

@Michael gerçek diyor. @Jan, bu belirli bağlamla ilgili olarak daha uygun bir cevap vermiş gibi görünüyor.
VicePrez

1
get_the_category()category.php içinde çalışıyor
Lea Cohen

0
$category = get_category( get_query_var( 'cat' ) );

$cat_id = $category->cat_ID;

$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);

1
Lütfen bunun sorunu neden çözebileceğini açıklayın . Bir kod pasajı bir cevap değildir.
fuxia

0

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.