Nhận ID danh mục trong mẫu Danh mục


22

Làm thế nào để tôi có được ID mèo bên trong Mẫu. Rất quan trọng: Tôi không thể làm điều đó bằng tên, bởi vì chúng tôi có những con mèo mulipl cùng tên. Chỉ có sên là khác. Nếu tôi có được con sên, nó cũng sẽ ổn thôi. Nhưng như tôi đã nói: Tôi không thể sử dụng tiêu đề Cat .....

Câu trả lời:


40

$wp_query->get_queried_object()sẽ cung cấp cho bạn "đối tượng hiện đang truy vấn". Trên một kho lưu trữ danh mục, đây là đối tượng thể loại, trên trang tác giả, đây là tác giả, trên một bài đăng, đây là bài viết, ... tốt, bạn hiểu ý. Nếu bạn chỉ muốn ID, bạn cũng có thể sử dụng $wp_query->get_queried_object_id().


9

dựa trên tìm kiếm của tôi, bạn phải sử dụng điều này:

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

Tôi giả sử bạn đã nhận được downvote bởi vì bạn không giải thích lý do tại sao nó giúp, chỉ nói rằng điều này không. Bạn có thể muốn kiểm tra nguồn của chức năng đó và thêm phần bên ngoài của bạn dưới dạng chỉnh sửa vào câu trả lời của bạn. Gợi ý: Nếu một bình luận cần dài hơn câu trả lời của bạn, thì nó nên là một bình luận :)
kaiser

7

Umm, tôi chưa thể bình luận, nhưng câu trả lời của VicePrez vẫn hoạt động. Các thao tác sau chỉ hoạt động tốt trên trang lưu trữ danh mục (mặc dù bạn có thể muốn làm gì đó ngoài việc chỉ lặp lại nó):

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

EDIT: Không có gì, nó hoạt động với tôi cho đến khi tôi bắt gặp một danh mục không có bài đăng, sau đó nó chọn danh mục con thay vì danh mục chính. Bạn không thể dựa vào get_the_carget trên trang mẫu danh mục .


Đây không phải là một giải pháp khả thi vì điều này trả về tất cả các danh mục cho tất cả các bài đăng trên trang danh mục đó. Kết quả lặp lại của bạn trả về danh mục ban đầu của bài đăng mới nhất trong danh sách.
cj5

4

Trừ khi tôi hiểu nhầm câu hỏi, tôi nghĩ bạn cũng có thể thêm id loại / sên vào lớp cơ thể:

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

4

Câu trả lời của @Jan Fabry thực sự là câu trả lời chính xác, đây là lý do: Vì Wordpress cho phép nhiều danh mục cho một bài đăng, nên việc sử dụng $category = get_the_category()và truy vấn $category[0]sẽ không hoạt động trong mọi trường hợp vì những gì bạn thực sự đang làm là yêu cầu danh mục đầu tiên của bài đăng đầu tiên. Hãy tưởng tượng bạn có các danh mục A, B và C. Nếu bạn chỉ có một bài đăng, nó có các danh mục A và B và bạn đang ở trong trang chuyên mục của B, thay vào đó bạn có thể có thông tin của A.

Đó là lý do tại sao nên sử dụng tốt hơn $category = $wp_query->get_queried_object(), vì trong ví dụ trước, nó sẽ luôn cung cấp cho bạn thông tin của B khi bạn ở trong trang danh mục của B.


2

Bạn có thể sử dụng get_the_category()để làm điều đó.

Thí dụ:

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

?>

Bạn đã có thể sử dụng:

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

để xem mảng các đối tượng được trả về.


câu hỏi "làm thế nào để tôi có được ID mèo trong Mẫu" được mở cho các cách hiểu khác nhau. trong một mẫu bài duy nhất, bạn đã đúng. nó hoạt động bên trong vòng lặp để có được các danh mục của một bài đăng; tuy nhiên, get_the_category()sẽ không hoạt động trong trang lưu trữ danh mục để lấy id danh mục, kết quả sẽ là tùy ý.
Michael

@Michael nói thật. @Jan dường như đã đưa ra một câu trả lời phù hợp hơn liên quan đến bối cảnh cụ thể đó.
VicePrez

1
get_the_category()không hoạt động trong thể
loại.php

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

$cat_id = $category->cat_ID;

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

1
Hãy giải thích tại sao điều đó có thể giải quyết vấn đề. Một đoạn mã không phải là một câu trả lời.
fuxia

0

Hầu hết các ví dụ trên đều hoạt động nhưng nếu bạn đang sử dụng nhiều danh mục KHÔNG (như khi viết, phiên bản WP 3.6) của các phương thức khác sẽ hoạt động để có được tất cả các danh mục đã được chuyển sang "cat" hoặc "category_name".

Cách duy nhất tôi tìm thấy là lấy dữ liệu từ:

$wp_query->query['category_name']

Vì một số lý do, điều này trả về một giá trị khác get_query_var( 'category_name' )mà chỉ trả về loại đầu tiên.

Khi sử dụng nhiều danh mục, bạn sẽ phải sử dụng một số chức năng như explodeđể có được một mảng các sên danh mục, sau đó lặp qua đó để lấy tất cả các 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

?>

Rõ ràng cần phải có một số cân nhắc khi sử dụng toán tử AND (+) hoặc OR (,).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.