Dapatkan ID Kategori di dalam templat Kategori

22

bagaimana cara mendapatkan ID kucing di dalam Templat. Sangat penting: Saya tidak dapat melakukannya dengan namanya, karena kami memiliki kucing muliple dengan nama yang sama. Hanya siput yang berbeda. Jika saya mendapatkan siput itu, tidak apa-apa juga. Tapi seperti yang saya katakan: Saya tidak bisa menggunakan judul Cat .....

Laura
sumber

Jawaban:

40

$wp_query->get_queried_object()akan memberi Anda "objek yang sedang ditanyai". Pada arsip kategori ini adalah objek kategori, pada halaman penulis ini adalah penulis, pada satu posting ini adalah posting itu sendiri, ... well, Anda mendapatkan idenya. Jika Anda hanya menginginkan ID Anda juga dapat menggunakan $wp_query->get_queried_object_id().

Jan Fabry
sumber
9

berdasarkan pencarian saya, Anda harus menggunakan ini:

$category = get_queried_object();
echo $category->term_id;
Mahdi Majidzadeh
sumber
Saya berasumsi Anda menerima downvote karena Anda tidak menjelaskan mengapa itu membantu, hanya menyatakan bahwa ini berhasil. Anda mungkin ingin memeriksa sumber fungsi itu dan menambahkan komentar Anda sebagai edit jawaban Anda. Petunjuk: Jika sebuah komentar harus lebih panjang dari jawaban Anda, maka itu seharusnya adalah sebuah komentar :)
kaiser
7

Umm, saya belum bisa berkomentar, tapi jawaban VicePrez berhasil. Berikut ini berfungsi dengan baik pada halaman arsip kategori (walaupun Anda mungkin ingin melakukan sesuatu selain hanya menggemakannya):

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

Suntingan: Gores itu, itu berhasil untuk saya sampai saya menemukan kategori yang tidak memiliki posting, kemudian mengambil subkategori bukan kategori utama. Anda tidak dapat mengandalkan get_the_category pada halaman templat kategori .

Stephen Cronin
sumber
Ini bukan solusi yang layak karena ini mengembalikan semua kategori untuk semua posting pada halaman kategori itu. Hasil gema Anda mengembalikan kategori awal dari posting terbaru dalam daftar.
cj5
4

Kecuali saya salah paham pertanyaan, saya pikir Anda juga bisa menambahkan kategori id / siput ke kelas tubuh:

<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>

sumber
4

@Jan Fabry sebenarnya adalah jawaban yang benar, inilah alasannya: Karena Wordpress mengizinkan beberapa kategori untuk sebuah posting, penggunaan $category = get_the_category()dan permintaan $category[0]tidak akan berfungsi dalam setiap kasus karena apa yang sebenarnya Anda lakukan adalah menanyakan kategori pertama dari posting pertama. Bayangkan Anda memiliki kategori A, B dan C. Jika Anda hanya memiliki satu posting, ia memiliki kategori A dan B dan Anda berada di dalam halaman kategori B, Anda dapat berakhir dengan informasi A.

Itu sebabnya lebih baik digunakan $category = $wp_query->get_queried_object(), karena pada contoh sebelumnya akan selalu memberi Anda informasi B saat Anda berada di dalam halaman kategori B.

WebMacheter
sumber
2

Anda bisa menggunakannya get_the_category()untuk melakukan itu.

Contoh:

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

?>

Anda bisa menggunakan:

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

untuk melihat berbagai objek yang dikembalikan.

VicePrez
sumber
pertanyaan 'bagaimana cara mendapatkan ID kucing di dalam Templat' terbuka untuk interpretasi yang berbeda. dalam satu templat posting, Anda benar. ia bekerja di dalam loop untuk mendapatkan kategori dari satu posting; Namun, get_the_category()tidak akan berfungsi di halaman arsip kategori untuk mendapatkan id kategori, hasilnya akan sewenang-wenang.
Michael
@Michael benar katakan. @Jan tampaknya telah memberikan jawaban yang lebih tepat terkait dengan konteks spesifik itu.
Wakil Presiden
1
get_the_category()tidak bekerja di dalam category.php
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);
KaramBirKamboj
sumber
1
Tolong jelaskan mengapa itu bisa menyelesaikan masalah. Cuplikan kode bukan jawaban.
fuxia
0

Sebagian besar contoh di atas berfungsi tetapi jika Anda menggunakan beberapa kategori NONE (saat penulisan, WP versi 3.6) dari metode lain berfungsi untuk mendapatkan semua kategori yang telah diteruskan ke "cat" atau "category_name".

Satu-satunya cara yang saya temukan adalah dengan menarik data dari:

$wp_query->query['category_name']

Untuk beberapa alasan ini mengembalikan nilai yang berbeda get_query_var( 'category_name' )yang hanya mengembalikan kategori pertama.

Saat menggunakan beberapa kategori, Anda harus menggunakan beberapa fungsi seperti explodeuntuk mendapatkan array siput kategori, lalu mengulanginya untuk mengambil semua ID:

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

?>

Jelas perlu ada beberapa pertimbangan saat menggunakan operator AND (+) atau OR (,).

acSlater
sumber