web-dev-qa-db-ja.com

ループでcurrent_parent_categoryを取得するか、Catの祖先問題

私は今週からいくつかの問題を抱えています。私はそれで悪い時間を過ごしています!

私は自分の状況を説明します:

投稿カテゴリのスタイルを設定しました。

(背景色と小さな画像の背景).

例えば。

親A - 子供1 - 子供2 - 子供3

親B - 子供1 - 子供2

親C - 子供1 - 子供2

私が使っているループは:

<a href="#" class="<?php $category = get_category($cat);
echo $category->category_nicename;?>"><?php single_cat_title('') ?></a> 

私がparent_categoryページにいるとき、これはうまく働きます、それは私がクラスとしてcategory_slugを使って、私がcssによってセットアップしたスタイルを持ってきます。

(例えばカテゴリのCSSの場合:)

article.category-business-and-finance .meta-category2 a.business-and-finance {
color: white;
float: left;
padding: 2px;
padding-left: 25px;
background: url(myimg) no-repeat left  ;
background-size: 15px 15px;
background-color: #c3bc19  ;
background-position-x: 5px;
padding-right: 5px;
}

ただし、child_categoryのcategory_pageに移動すると、別のカテゴリのスタイルが表示されます。いくつかの投稿が同時にmultipel parent_categoryと複数のchld-categoryに設定されているように。たくさんのサブカテゴリーが将来追加されるので、それぞれのchild_categoryに対してCSSを作成したくはありません。

私が達成したいのは、それが現在のparent_categoryスラッグのクラスを持ってくるために、child_categoryのためです。

これはどのようにして達成できますか?

私は代わりにこのループを試してみました:

<a href="#" class="<?php $parentscategory ="";
foreach((get_the_category()) as $category) {
    if ($category->category_parent == 0) {
        $parentscategory .= ' ' . $category->slug . ' ';
    }
}
echo substr($parentscategory,0,-2);?>"><?php single_cat_title('') ?></a> 

これにより、投稿に添付されているすべてのparent_categoryからのクラスが追加されます。 ..現在のものだけにする方法はありますか?

(例:親Aからの子-1のカテゴリページのim、ただし、投稿は親Bおよび親Cにもアタッチされています。これにより、親ABおよびCのクラスと現時点でのクラスを追加します親Aのみの場合 - 親Aページの子カテゴリのimとして).

どうすればこれを作ることができますか? current_parent_categoryを試すべきですか? cat_ancestor?

いつもありがとうございます。

1
tibewww

あなたは get_ancestors() を使うことができます。これを変換することができます:

<a href="#" class="<?php $category = get_category($cat);
echo $category->category_nicename;?>"><?php single_cat_title('') ?></a> 

これには(私はあなたがあなたの質問でそれを示していなかったので私は$catが何であるかわかりません、私はそれがカテゴリーIDであると思います、そうでなければ、カテゴリーIDを提供しなければなりません):

<?php

$cat_ancestors = get_ancestors( $cat, 'category' );
$top_parent = get_category( end( $cat_ancestors ) );

?>

<a href="#" class="<?php esc_attr_e( $top_parent->slug );?>"><?php echo $top_parent->name; ?></a> 

カテゴリがすでに最上位の親カテゴリである場合にもコードを機能させるには、get_ancestorsによって返される値を確認する必要があります。例えば:

<?php

$cat_ancestors = get_ancestors( $cat, 'category' );

if( !empty($cat_ancestors) ) {

    $cat = get_category( end( $cat_ancestors ) );

} else {

    $cat = get_category( $cat );

}

?>

<a href="#" class="<?php esc_attr_e( $cat->slug );?>"><?php echo $cat->name; ?></a>
1
cybmeta