回答:
うーん、まだコメントできませんが、VicePrezの答えは機能します。以下は、カテゴリアーカイブページで正常に機能します(おそらく、単にエコーする以外のことをしたいでしょう)。
<?php
$category = get_the_category();
echo $category[0]->cat_ID;
?>
編集:スクラッチ、それは私が投稿を持っていないカテゴリに出会うまで私のために働いた、それはメインカテゴリの代わりにサブカテゴリをピックアップしました。カテゴリーテンプレートページでget_the_categoryに頼ることはできません。
質問を誤解していない限り、カテゴリーid / slugをbodyクラスに追加することもできると思います。
<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>
@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の情報を取得するため、を使用する方がよい理由です。
それを使用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()
カテゴリIDを取得するカテゴリアーカイブページでは機能しないため、結果は任意です。
get_the_category()
category.php内で動作します
上記の例のほとんどは機能しますが、複数のカテゴリを使用している場合(執筆時点では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(、)演算子を使用する際には、いくつかの考慮事項が必要です。