Отримати ідентифікатор категорії всередині шаблону Категорія


22

як мені отримати ідентифікатор кота всередині шаблону. Дуже важливо: я не можу зробити це по імені, тому що у нас є багатолюдні коти з тим же ім’ям. Тільки слимак інший. Якби я взяв слимака, було б і добре. Але як я вже сказав: я не можу використовувати заголовок Cat .....

Відповіді:


40

$wp_query->get_queried_object()дасть вам "об'єкт, що запитується в даний момент". У архіві категорій це об’єкт категорії, на сторінці автора це автор, на одній публікації це сама публікація, ... ну, ви отримуєте ідею. Якщо ви хочете лише ідентифікатор, ви також можете використовувати $wp_query->get_queried_object_id().


9

На основі мого пошуку ви повинні використовувати це:

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

Я припускаю, що ви отримали протизаконний голос, оскільки ви не пояснюєте, чому це допомагає, просто констатуючи, що це так. Ви можете перевірити джерело цієї функції та додати свої зміни як редагування до своєї відповіді. Підказка: Якщо коментар повинен бути довше вашої відповіді, тоді це мав би бути коментар :)
kaiser

7

Гм, я поки що не можу коментувати, але відповідь Віце-Прес справді працює. На сторінці архіву категорій наведено наступні відомості (хоча, ймовірно, ви хочете зробити щось інше, ніж просто повторити це):

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

РЕДАКТИРУЙТЕ: Почеркніть, це працювало на мене, поки я не натрапив на категорію, в якій не було посади, а потім він підняв підкатегорію замість основної категорії. Ви не можете розраховувати на get_the_category на сторінці шаблону категорії .


Це не прийнятне рішення, оскільки це повертає всі категорії для всіх публікацій на цій категорії категорій. Ваш ехо-результат повертає початкову категорію останньої публікації у списку.
cj5

4

Якщо я не розумію питання, я думаю, ви також можете додати категорію id / slug до класу body:

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

4

@Jan Fabry відповідь насправді є правильною відповіддю, ось чому: Оскільки Wordpress дозволяє декілька категорій для публікації, використання $category = get_the_category()та запит $category[0]не працюватимуть у кожному випадку, оскільки те, що ви насправді робите, - це просити першу категорію першого повідомлення. Уявіть, що у вас є категорії A, B і C. Якщо у вас є лише одна посада, вона містить категорії A і B, і ви перебуваєте на сторінці категорії B, ви можете замість цього отримати інформацію A.

Ось чому це краще використовувати $category = $wp_query->get_queried_object(), оскільки в попередньому прикладі ви завжди отримаєте інформацію B, коли ви знаходитесь на сторінці категорії B.


2

Ви можете використовувати get_the_category()для цього.

Приклад:

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

?>

Ви можете використовувати:

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

для перегляду масиву об’єктів, які повертаються.


Питання "як мені отримати ідентифікатор кота всередині шаблону" є відкритим для різних тлумачень. в межах одного шаблону публікації ви маєте рацію. він працює всередині циклу, щоб отримати категорії одного поста; однак, get_the_category()не буде працювати на сторінці архіву категорій, щоб отримати ідентифікатор категорії, результат був би довільним.
Майкл

@Michael правда сказати. @Jan, схоже, дав більш відповідну відповідь щодо цього конкретного контексту.
ВіцеПрез

1
get_the_category()працює в категорії.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
Поясніть, будь ласка, чому це може вирішити проблему. Фрагмент коду - це не відповідь.
fuxia

0

Більшість наведених вище прикладів працює, але якщо ви використовуєте декілька категорій НІКОЛИ ( з моменту написання, WP версія 3.6) інших методів працюють, щоб отримати всі категорії, передані або "cat", або "category_name".

Єдиний спосіб, який я знайшов - це витягнути дані з:

$wp_query->query['category_name']

Чомусь це повертає інше значення, до get_query_var( 'category_name' )якого повертається лише перша категорія.

При використанні декількох категорій вам доведеться скористатися якоюсь функцією, як-от explodeотримати масив категорій, а потім прокрутити цю програму, щоб захопити всі ідентифікатори:

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

?>

Очевидно, що слід використовувати певні міркування при використанні операторів AND (+) або OR (,).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.