web-dev-qa-db-ja.com

カテゴリテンプレート内のカテゴリIDを取得する

テンプレート内で猫IDを取得する方法非常に重要:同じ名前の猫が複数いるので、名前ではできません。ナメクジだけが違います。もし私がナメクジになったら、それも大丈夫でしょう。私が言ったようにしかし:私は猫のタイトルを使用することはできません.....

20
Laura

$wp_query->get_queried_object()はあなたに "現在問い合わせ中のオブジェクト"を与えるでしょう。カテゴリアーカイブではこれがカテゴリオブジェクトであり、作者ページではこれが作者であり、単一の投稿ではこれが投稿自体です。 IDだけが欲しい場合は$wp_query->get_queried_object_id()を使うこともできます。

39
Jan Fabry

私の検索に基づいてあなたはこれを使用する必要があります:

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

うーん、まだコメントできませんが、VicePrezの答えはうまくいきます。以下はカテゴリアーカイブページでうまく動作します(ただし、単にエコーする以外のことをしたい場合もあります)。

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

編集: /投稿がないカテゴリに遭遇するまでそれは私のために働いていました、そしてそれはメインカテゴリの代わりにサブカテゴリを拾いました。 カテゴリテンプレートページのget_the_categoryに頼ることはできません

7
Stephen Cronin

@Jan Fabryの回答が実際に正しい答えです、これが理由です。Wordpressでは投稿に対して複数のカテゴリが許可されているため、$category = get_the_category()$category[0]のクエリを使用しても最初の投稿の最初のカテゴリが要求されるため、うまくいきません。 。カテゴリA、B、Cがあるとします。投稿が1つしかなく、カテゴリAとBがあり、Bのカテゴリページ内にいる場合は、代わりにAの情報が表示されることがあります。

前の例では、Bのカテゴリページに入っているときは常にBの情報が取得されるため、$category = $wp_query->get_queried_object()を使用することをお勧めします。

4
The WebMacheter

私が質問を誤解していない限り、私はあなたがボディクラスにカテゴリid/slugを追加することもできると思います:

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

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

返されるオブジェクトの配列を表示します。

2
VicePrez
$category = get_category( get_query_var( 'cat' ) );

$cat_id = $category->cat_ID;

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

上記の例のほとんどはうまくいきますが、複数のカテゴリを使っているならNONE (これを書いている時点では、WP version 3.6) 他のメソッドのいずれかに渡しますcat "または" category_name "。

私が見つけた唯一の方法はからデータを引き出すことです:

$wp_query->query['category_name']

何らかの理由で、これは最初のカテゴリのみを返すget_query_var( 'category_name' )とは異なる値を返します。

複数のカテゴリを使用する場合、カテゴリスラッグの配列を取得するにはexplodeのような関数を使用し、それからそれをループしてすべての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

?>

明らかに、AND(+)またはOR(、)演算子を使用するときには、いくつか考慮すべき点があります。

0
acSlater