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


22

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

回答:


40

$wp_query->get_queried_object()「現在照会されているオブジェクト」を提供します。カテゴリアーカイブではこれがカテゴリオブジェクトであり、著者ページではこれが著者であり、単一の投稿ではこれが投稿そのものです。IDのみが必要な場合は、を使用することもできます$wp_query->get_queried_object_id()


9

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

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

なぜそれが役立つのかを説明しておらず、単にそうするだけだと言っているからです。その関数のソースを調べ、結果を編集として回答に追加することができます。ヒント:コメントを回答よりも長くする必要がある場合は、コメントである必要があります:)
kaiser

7

うーん、まだコメントできませんが、VicePrezの答えは機能します。以下は、カテゴリアーカイブページで正常に機能します(おそらく、単にエコーする以外のことをしたいでしょう)。

<?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があるとします。投稿が1つしかない場合、カテゴリ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>';
?>

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


「テンプレート内で猫IDを取得するにはどうすればよいか」という質問には、さまざまな解釈があります。単一の投稿テンプレート内で、あなたは正しいです。ループ内で機能して、単一の投稿のカテゴリを取得します。ただし、get_the_category()カテゴリIDを取得するカテゴリアーカイブページでは機能しないため、結果は任意です。
マイケル

@Michael true say @Janは、その特定のコンテキストに関してより適切な答えを与えたようです。
VicePrez

1
get_the_category()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は、カテゴリスラッグの配列を取得するなどの関数を使用し、それをループしてすべての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(、)演算子を使用する際には、いくつかの考慮事項が必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.