Nhận ID danh mục hiện tại của trang đang hoạt động


78

Tìm cách kéo ID danh mục của một trang cụ thể trong WordPress đang liệt kê tất cả các bài đăng sử dụng danh mục cụ thể đó. Đã thử những cách dưới đây nhưng không hiệu quả. Tôi có thể lấy tên danh mục bằng cách sử dụng single_term_title.

$category = single_term_title("", false);
$catid = get_cat_ID( $category );

$categoryđang hiển thị "Giải trí" chẳng hạn. Nhưng tôi cũng cần ID của "Entertainment". Làm thế nào tôi sẽ đi về điều này?


Đó là trang danh mục bình thường hay mẫu trang tùy chỉnh?
paislee

nó là một phân loại tùy chỉnh - cố gắng sử dụng này trên một tập tin có têntaxonomy-event-categories-entertainment.php
RonnieT

Câu trả lời:


72

Bạn có thể thử sử dụng get_the_category():

$categories = get_the_category();
$category_id = $categories[0]->cat_ID;

16
$ category [0] -> cat_ID là chính xác.
nemesisdesign

57
Phương pháp này thực sự kiểm tra danh mục đầu tiên của bài đăng đầu tiên trên trang. Nếu không có bài đăng nào hoặc nếu bài viết đầu tiên có nhiều danh mục, điều này sẽ không thành công hoặc trả về thông tin không chính xác.
Jordan Eldredge

5
Tôi đồng ý với @JordanEldredge, điều này sẽ trả về thông tin không chính xác.
Hóa đơn

3
Điều này sẽ trả về danh mục đầu tiên của bài đăng đầu tiên của trang.
Shaffe

Nó cũng sẽ không thành công nếu trang đã xem là một danh mục con. Kiểm tra đầu ra của $categoriesmảng.
egdavid

194

Nếu đó là một trang danh mục, bạn có thể lấy id của danh mục hiện tại bằng cách:

$category = get_category( get_query_var( 'cat' ) );
$cat_id = $category->cat_ID;

Nếu bạn muốn nhận id danh mục của bất kỳ danh mục cụ thể nào trên bất kỳ trang nào, hãy thử sử dụng:

$category_id = get_cat_ID('Category Name');

3
Chính xác những gì tôi đang tìm kiếm. Tốt hơn câu trả lời ở trên nếu bạn đang tạo một mẫu Danh mục chung vì bạn chỉ nhận được Danh mục mà trang sẽ hiển thị trái ngược với mảng nhiều Danh mục ở trên.
theflowersoftime

Nó làm việc hoàn hảo cho tôi. Tôi gặp sự cố khi lấy ID và làm việc tốt cho tôi. Giờ lưu :)
prakashchhetri

3
Cần thay câu trả lời đúng! Câu trả lời được đánh dấu là đúng, đánh lừa tôi.
Mosh Feu

13
Câu trả lời này có một số mã không cần thiết. Dòng đầu tiên của mã lấy toàn bộ dữ liệu danh mục trong hàm get_category bằng cách sử dụng một tham số - CATEGORY ID (vì đây là thứ mà get_query_var ('cat') trả về). Dòng mã thứ hai thực sự lấy id từ dữ liệu. Điều này có nghĩa là hàm get_category hoàn toàn không được sử dụng ở đây và nếu ai đó chỉ muốn id, thì chỉ nên sử dụng get_query_var ('cat')!
Bartosz Górski

Cảm ơn, điều này cũng giúp tôi!
Jason Ellis

36

Cách cũ nhất nhưng nhanh nhất mà bạn có thể sử dụng là:

$cat_id = get_query_var('cat');

điều này có vẻ hoàn hảo. Có những hạn chế nào cho điều này so với câu trả lời của Ram Mehar Deswal?
dewd

Đây thực sự là giải pháp làm việc, nó sẽ hiển thị danh mục của trang đã xem.
egdavid

1
@dewd hãy tìm nhận xét của Bartosz Górski trong câu trả lời của Ram Mehar Deswal. Anh ấy hoàn toàn đúng và câu trả lời này ngay tại đây đáp ứng tất cả những gì bạn cần.
bấm còi 31

@ honk31 thx vì đã chỉ cho tôi rằng bạn là công dân tốt của bạn! :)
dewd

get_query_var ('cat') là sai đối với tôi
Dominic

21

Tôi sử dụng hàm get_queried_object để lấy danh mục hiện tại trên trang mẫu category.php.

$current_category = get_queried_object();

Jordan Eldredge nói đúng, get_the_category không phù hợp ở đây.


1
Đẹp, chưa bao giờ thấy cái này trước đây.
Drew Baker

Nếu kết quả không phải là kết quả mong đợi, hãy gọi wp_reset_query();khôi phục phiên bản WP_Query mặc định.
Shaffe

Đây thực sự là chức năng Wordpress hữu ích nhất mà tôi từng tìm thấy. Đó là có thể sử dụng ở khắp mọi nơi: trang, bài viết, danh mục, vv
frodeborli

4

Tôi nghĩ một số cách trên có thể hiệu quả nhưng việc sử dụng hàm get_the_category có vẻ phức tạp và có thể cho kết quả không mong muốn.

Tôi nghĩ rằng cách trực tiếp và đơn giản nhất để truy cập ID mèo trong trang danh mục là:

$wp_query->query_vars['cat']

Chúc mừng


Hoàn hảo! Cảm ơn.
Beny

1

Tôi đã tìm thấy câu hỏi này trong khi tìm kiếm chính xác những gì bạn đã hỏi. Rất tiếc, bạn đã chấp nhận một câu trả lời không chính xác. Vì lợi ích của những người khác đang cố gắng đạt được những gì chúng tôi đã cố gắng đạt được, tôi nghĩ tôi sẽ đăng câu trả lời chính xác.

$cur_cat = get_cat_ID( single_cat_title("",false) );

Như bạn single_term_title("", false);đã nói là trả lại chính xác tiêu đề danh mục, tôi không chắc tại sao bạn lại gặp rắc rối với mã của mình; nhưng đoạn mã trên hoạt động hoàn hảo đối với tôi.


1

Tôi đã sử dụng cái này cho breadcrums trong trang mẫu danh mục:

$cat_obj = $wp_query->get_queried_object();
$thiscat_id = $cat_obj->term_id;
$thiscat = get_category($thiscat_id);
$parentcat = get_category($thiscat->parent);

1

Thay thế -

 $catID = the_category_ID($echo=false);

CHỈNH SỬA: Chức năng trên không được dùng nữa, vui lòng sử dụng get_the_category()


FYI: Chức năng này không được dùng nữa.
Sagive SEO

1

nếu bạn cần ID danh mục, bạn sẽ lấy nó qua get_query_var , có khả năng truy xuất tất cả các biến có thể truy vấn công khai.

$category_id = get_query_var('cat');

đây là một ví dụ để lấy tên danh mục

$category_name = get_query_var('category_name');

và tất nhiên tất cả get_queried_object mạnh mẽ

$queried_object = get_queried_object();

đang trả về đối tượng thuật ngữ phân loại hoàn chỉnh (khi được sử dụng trên trang lưu trữ phân loại ..)


0
$cats = wp_get_post_terms( $post->ID, 'product_cat' );
foreach($cats as $cat){
/*check for category having parent or not except category id=1 which is wordpress default category (Uncategorized)*/
  if($cat->parent != '0' && $cat->term_id != 1){
    echo '<h2 class="link"><a href="'.get_category_link($cat->term_id ).'">'.$cat->name.'</a></h2>';
    break;
  }
}

0

Ở trên đã thử các giải pháp tìm ID mèo của bài đăng, nhưng không hiệu quả, thay vào đó, hãy sử dụng cách sau:

$obj = get_queried_object();
$c_id = wp_get_post_categories($obj->ID);
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.