2

シナリオを最初にお話ししましょう。最初に、ワードプレスのカテゴリの構造は次のようになります。

Level 1: Top
Level 2: -Nextme_1
Level 3: --Nextme_2
         --Nextme_3
Level 4: ---Nextme_4
         ---Nextme_5

ここで、カテゴリのレベルを確認する必要がありますか? レベル 3 のカテゴリをキャッチすると、別のテンプレートを使用する必要があり、レベル 4 の場合は、別のテンプレートを使用する必要がありますか?

誰でもヒントを教えてもらえますか?

ありがとう
ラフル

4

4 に答える 4

7

カテゴリがあまりない場合は、管理者からスラッグを編集してみると、ページで次の方法でカテゴリ スラッグを取得できます。

if (is_category()) {
    $cat = get_query_var('cat');
    $category = get_category($cat);
    echo 'your slug is '. $category->slug;
}

ここで、カテゴリ スラッグを編集するときに、レベルにちなんで名前を付けてみてください: cat-lvl-1、cat-lvl-2。次に、ページで、php 文字列関数を使用してカテゴリ スラッグから数値を抽出し、その数値を確認します。

if ($category->slug == 1 ) {
//load the template for the category of level 1
}
 if ($category->slug == 2 ) {
    //load the template for the category of level 2
    }

等々。

後で編集:これを試してください:

function get_level($category, $level = 0)
{
    if ($category->category_parent == 0) {
        return $level;
    } else {
        $level++;
        $category = get_category($category->category_parent);
        get_level($category, $level);
    }

}

if (is_category()) {
    $cat = get_query_var('cat');
    $yourcat = get_category($cat);

    echo get_level($yourcat);
}
于 2012-02-10T10:19:29.793 に答える
4

get_ancestors()関数を呼び出してを取得できan array containing the parents of the given objectます。次に、結果の要素をカウントする必要があります。

function get_the_level($id, $type = 'category') {
  return count( get_ancestors($id, $type) );
}

if( is_category() ) {
  $level = get_the_level( $cat );
} 
elseif( is_product_category() ) {
  $level = get_the_level( $wp_query->get_queried_object()->term_id, 'product_cat' );
}
于 2017-02-08T10:10:59.300 に答える
3

どうもありがとう。これは、あなたが書いたコードにわずかな変更を加えた素晴らしいものですが、値は返されません (つまり、$level) 計算は正しいですが。私が行った小さな変更と、以下に示すコードをわずかに編集することで、正常に動作するようになりました..

`

function get_level($category, $level = 0)
{
    if ($category->category_parent == 0) {
        return $level;
    } else {
        $level++;
        $category = get_category($category->category_parent);
        return get_level($category, $level);
    }

}

if (is_category()) {
    $cat = get_query_var('cat');
    $yourcat = get_category($cat);

    echo get_level($yourcat);
}

`

ありがとう @zuzuleinen

于 2012-02-10T22:14:22.497 に答える
0

数か月前にこのページにアクセスしました。私は今日戻ってきて、上記の解決策を上に向けて、まだ掘り下げていました。これは優れたソリューションですが、Wordpress の方が優れているか、それに近いソリューションを提供することがよくあります。

get_category_parents()

この関数は、基本的に Rahul が入力したとおりに機能します。それはまた、最も論理的なアプローチと思われるものであり、それがRahulがこれについて私からポイントを得ている理由です. $link を使用せず、カテゴリの文字列を返し、explode() してカウントするか、区切り記号が使用された回数をカウントして 1 を追加することができると思います。

function get_category_parents( $id, $link = false, $separator = '/', $nicename = false, $visited = array() ) {
   $chain = '';
$parent = get_term( $id, 'category' );
if ( is_wp_error( $parent ) )
    return $parent;

if ( $nicename )
    $name = $parent->slug;
else
    $name = $parent->name;

if ( $parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited ) ) {
    $visited[] = $parent->parent;
    $chain .= get_category_parents( $parent->parent, $link, $separator, $nicename, $visited );
}

if ( $link )
    $chain .= '<a href="' . esc_url( get_category_link( $parent->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator;
else
    $chain .= $name.$separator;
return $chain;

}

于 2014-07-06T11:41:37.543 に答える