web-dev-qa-db-ja.com

カテゴリが親カテゴリにある場合

投稿の主なトップカテゴリーが何かを確認する機能があります。だから私はこのようなカテゴリツリーがあります

Foo
-bar
--foobar
cat2

もしpostがfoobarにあれば、私の関数post_is_in_descendant_categoryに "foo"と表示され、style-foo.cssでその投稿をスタイルすることができます。私が今欲しいのは、同じことをスタイルページカテゴリ「foobar」にも可能にすることです。 Wordpressの関数in_categoryは投稿に対してのみ機能します。

したがって、私のコードif ( in_category( 'foo' ) || post_is_in_descendant_category( get_term_by( 'name', 'foo', 'category' )) || is_category('56') )はサブカテゴリには機能しません。

私が正しく理解しているならば、あなたの "post_is_in_descendant_category"関数は投稿がカテゴリの子孫であるかどうかをチェックし、あなたはカテゴリが子孫であるかどうかチェックしたいです。もしそうなら、この関数をあなたのfunctions.phpに追加してください

function is_desc_cat($cats, $_post = null) {
  foreach ((array)$cats as $cat) {
    if (in_category($cat, $_post)) {
      return true;
    } else {
      if (!is_int($cat)) $cat = get_cat_ID($cat);
      $descendants = get_term_children($cat, 'category');
      if ($descendants && in_category($descendants, $_post)) return true;
    }
  }

return false;
}

そしてこれを次のように使います。

if (is_desc_cat("foo")) {
  // use foo.css
} else {
  // use default.css
}

お役に立てれば。

4
Bainternet

これを試して:

$cat_id = $wp_query->get_queried_object_id();
$parents = explode( '/', get_category_parents( $cat_id, false ) );

if( in_array( 'foo', $parents ) ) {

}
elseif( in_array( 'cat2', $parents ) ) {

}
else {


}
2
Rarst