現在の投稿の親カテゴリスラグを取得する方法


12

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

しかし、スペース(および大文字の使用)が問題です...そして、親カテゴリーのスラッグを取得できないようです。

私はおそらくどこかに簡単なステップが欠けていることを知っていますが、どんな洞察もいただければ幸いです。

回答:


18

によって返されたID値を使用して、$category[0]->category_parentそれを渡す必要があり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;
}

5

親カテゴリデータをクエリする必要があります。get_categoryそれを行うためにかなり構築されています。

$category = get_the_category(); 
$parent = get_category($category[0]->category_parent);
echo $parent->slug;

これは、カテゴリの直接の親を返します。これには、次のカテゴリのセットが与えられます。

  • 漫画
      • スクービー

上記のコードは、「Scooby」のIDを指定すると「Dog」を返します。最上位の親カテゴリ「漫画」が必要な場合は、ネストの深さに関係なく、次のようなものを使用します。

$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();
}

これには、エラー処理が比較的簡単になるという利点もあります。


答えてくれてありがとう。将来同様のスニペットを使用する可能性がありますが、親カテゴリ/サブカテゴリのないカテゴリの投稿の場合もエラーがスローされます。
DLR 2014年

@DLR:はい、わかっています。答えを完成させる前に出発しなければなりませんでした。私はもっ​​と複雑でより堅牢なものに取り組んでいました。編集を参照してください。
s_ha_dum 2014年

0

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

それが誰かを助けることができるなら... 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

次のように簡略化できます。

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

0

次の関数は、ルートカテゴリを返すようになっています。

function get_root_category($category = null) {
  if (!$category) $category = get_the_category()[0];
  $ancestors = get_ancestors($category->term_id, 'category');
  if (empty($ancestors)) return $category;
  $root = get_category(array_pop($ancestors)); 
  return $root;
}

使用法: get_root_category()->slug

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