Uzyskaj identyfikator kategorii w szablonie kategorii

22

jak uzyskać identyfikator kota w szablonie. Bardzo ważne: nie mogę tego zrobić po imieniu, ponieważ mamy wiele kotów o tej samej nazwie. Tylko ślimak jest inny. Gdybym dostał ślimaka, też byłoby dobrze. Ale tak jak powiedziałem: nie mogę użyć tytułu kota .....

Laura
źródło

Odpowiedzi:

40

$wp_query->get_queried_object()da ci „aktualnie poszukiwany obiekt”. W archiwum kategorii jest to obiekt kategorii, na stronie autora jest to autor, na pojedynczym poście jest to sam post, ... cóż, masz pomysł. Jeśli chcesz tylko identyfikatora, możesz go również użyć $wp_query->get_queried_object_id().

Jan Fabry
źródło
9

w oparciu o moje wyszukiwanie musisz użyć tego:

$category = get_queried_object();
echo $category->term_id;
Mahdi Majidzadeh
źródło
Zakładam, że otrzymałeś głos negatywny, ponieważ nie wyjaśniasz, dlaczego to pomaga, po prostu stwierdzając, że tak. Możesz sprawdzić źródło tej funkcji i dodać swoje wyniki jako edytuj do swojej odpowiedzi. Wskazówka: Jeśli komentarz musi być dłuższy niż twoja odpowiedź, powinien to być komentarz :)
kaiser
7

Umm, nie mogę jeszcze komentować, ale odpowiedź VicePreza działa. Poniższe działa dobrze na stronie archiwum kategorii (chociaż prawdopodobnie chcesz zrobić coś innego niż tylko echo):

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

EDYCJA: Zdrap to, działało dla mnie, dopóki nie natknąłem się na kategorię, która nie miała postu, a następnie podniosła podkategorię zamiast głównej kategorii. Nie można polegać na get_the_category na stronie szablonu kategorii .

Stephen Cronin
źródło
To nie jest realne rozwiązanie, ponieważ zwraca wszystkie kategorie dla wszystkich postów na tej stronie kategorii. Wynik echa zwraca początkową kategorię najnowszego postu na liście.
cj5
4

Chyba, że ​​nie rozumiem pytania, myślę, że możesz również dodać identyfikator kategorii / ślimak do klasy ciała:

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

źródło
4

Odpowiedź @Jana Fabry'ego jest właściwie prawidłową odpowiedzią, oto dlaczego: Ponieważ Wordpress zezwala na wiele kategorii postów, używanie $category = get_the_category()i tworzenie zapytań $category[0]nie będzie działać w każdym przypadku, ponieważ tak naprawdę pytasz o pierwszą kategorię pierwszego postu. Wyobraź sobie, że masz kategorie A, B i C. Jeśli masz tylko jeden post, ma on kategorie A i B i znajdujesz się na stronie kategorii B, zamiast tego możesz uzyskać informacje A.

Dlatego lepiej jest używać $category = $wp_query->get_queried_object(), ponieważ w poprzednim przykładzie zawsze dostaniesz informacje B, gdy jesteś na stronie kategorii B.

WebMacheter
źródło
2

Możesz to get_the_category()zrobić.

Przykład:

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

?>

Możesz użyć:

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

aby wyświetlić tablicę zwracanych obiektów.

VicePrez
źródło
pytanie „jak uzyskać identyfikator kota w szablonie” jest otwarte na różne interpretacje. w jednym szablonie postów masz rację. działa wewnątrz pętli, aby uzyskać kategorie jednego posta; jednak get_the_category()nie będzie działać na stronie archiwum kategorii, aby uzyskać identyfikator kategorii, wynik byłby dowolny.
Michael
@Michael true say. @Jan wydaje się udzielić bardziej odpowiedniej odpowiedzi w odniesieniu do tego konkretnego kontekstu.
VicePrez
1
get_the_category()działa wewnątrz 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
źródło
1
Proszę wyjaśnić, dlaczego to może rozwiązać problem. Fragment kodu nie jest odpowiedzią.
fuxia
0

Większość powyższych przykładów działa, ale jeśli używasz wielu kategorii BRAK (w chwili pisania, WP wersja 3.6), inne metody działają, aby uzyskać wszystkie kategorie, które zostały przekazane do „cat” lub „nazwa_kategorii”.

Znalazłem tylko sposób, aby pobrać dane z:

$wp_query->query['category_name']

Z jakiegoś powodu zwraca inną wartość, do get_query_var( 'category_name' )której zwraca tylko pierwszą kategorię.

Podczas korzystania z wielu kategorii będziesz musiał użyć funkcji, np. explodeUzyskać tablicę informacji o kategorii, a następnie przejrzyj ją, aby pobrać wszystkie identyfikatory:

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

?>

Oczywiście, należy wziąć pod uwagę pewne uwagi podczas korzystania z operatorów AND (+) lub OR (,).

acSlater
źródło