私のテーマは、現在のカテゴリのスラッグをCSSクラスとして挿入する次のコードを使用してカテゴリ別にスタイルを設定します。
<div class="CategorySpecificStyle
<?php $category = get_the_category(); echo $category[0]->slug; ?>">
<?php echo $category[0]->cat_name; ?>
</div>
今、私はたくさんの新しいサブカテゴリを追加しようとしています、そして、私が現在の記事の親カテゴリを選択してそれにスタイルを適用することができるはずであるとき、CSSでそれらすべてを追加するのは愚かです。
私は親カテゴリの名前を取得することができました:
$parentcat = get_cat_name($category[0]->category_parent);
しかし、スペース(そして大文字と小文字の区別)は問題です...そして私は親カテゴリのスラッグを得ることができないようです。
私はおそらくどこかに簡単なステップが足りないのを知っていますが、どんな洞察力も大いに感謝されるでしょう。
$category[0]->category_parent
によって返されたID値を使用し、それをget_term()
に渡す必要があります。例:
$category = get_the_category();
$category_parent_id = $category[0]->category_parent;
if ( $category_parent_id != 0 ) {
$category_parent = get_term( $category_parent_id, 'category' );
$css_slug = $category_parent->slug;
} else {
$css_slug = $category[0]->slug;
}
あなたは親カテゴリデータを問い合わせる必要があるでしょう。 get_category
はそのために作られています。
$category = get_the_category();
$parent = get_category($category[0]->category_parent);
echo $parent->slug;
それはカテゴリの直接の親を返します。それは、この一連のカテゴリを与えられています:
"Scooby"のIDを渡すと、上のコードは "Dog"を返します。一番上の親カテゴリである "Cartoon"が必要な場合は、ネストの深さに関係なく、次のようにします。
$category = get_the_category();
$parent = get_ancestors($category[0]->term_id,'category');
if (empty($parent)) {
$parent[] = array($category[0]->term_id);
}
$parent = array_pop($parent);
$parent = get_category($parent);
if (!is_wp_error($parent)) {
var_dump($parent);
} else {
echo $parent->get_error_message();
}
それはまた、比較的きちんとしたエラー処理という利点があります。
もし誰かが子猫や親を手に入れるのを手伝うことができるなら、あなたが0
に付けた1
または$category
に応じて
$category = get_the_category();
$parent = get_cat_name( $category[0]->category_parent );
if( ! function_exists('get_cat_slug') )
{
function get_cat_slug($cat_id) {
$cat_id = (int) $cat_id;
$category = &get_category($cat_id);
return $category->slug;
}
}
if ( !empty($parent) ) {
$output .= '<H2>' . esc_html( $category[1]->name ) . '</H2>';
} else {
$output .= '<H2>' . esc_html( $category[0]->name ) . '</H2';
}
私は@s_ha_dumからの前回の回答が好きですが、深さに関係なくトップレベルのカテゴリを取得するために、私はより単純な解決策であると考えるものを使用しました:
$cats = get_the_category();
foreach ( $cats as $cat ) {
if ( $cat->category_parent == 0 ) {
return $cat->name; // ...or whatever other attribute/processing you want
}
}
return ''; // This was from a shortcode; adjust the return value to taste
これを単純化することができます:
$category = get_the_category();
$cat_parent = $category[0]->category_parent;
$category = $cat_parent != 0 ? get_term($cat_parent, 'category')->slug : $category[0]->slug;