web-dev-qa-db-ja.com

現在の記事の親カテゴリスラッグを取得する方法

私のテーマは、現在のカテゴリのスラッグを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);

しかし、スペース(そして大文字と小文字の区別)は問題です...そして私は親カテゴリのスラッグを得ることができないようです。

私はおそらくどこかに簡単なステップが足りないのを知っていますが、どんな洞察力も大いに感謝されるでしょう。

11
DLR

$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;
}
15
Rachel Baker

あなたは親カテゴリデータを問い合わせる必要があるでしょう。 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();
}

それはまた、比較的きちんとしたエラー処理という利点があります。

5
s_ha_dum

もし誰かが子猫や親を手に入れるのを手伝うことができるなら、あなたが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';
}
0
TikTakTikTak

私は@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
0
scott8035

これを単純化することができます:

  $category   = get_the_category();
  $cat_parent = $category[0]->category_parent;
  $category   = $cat_parent != 0 ? get_term($cat_parent, 'category')->slug : $category[0]->slug;
0
Jafar Abazeed