WordPress kategorileri veya WooCommerce kategorilerinin üst kategorileri var ise ve bunları almak kullanmak için aşağıda vereceğim kodları kullanabilir örnekleri inceleyebilirsiniz.
Şu an sayfada açık olan kategorinin ID’sini almak için bunu kullanıyoruz:
$catID = get_queried_object_id();
Bir kategorinin üst kategorisini almak için bun kullanıyoruz, eğer üst kategorisi yok ise boş gelir:
$parent_ids = get_ancestors( $catID, 'product_cat', 'taxonomy' );
Yukarıdaki kodu örneğin WooCommerce için şöyle kullanabiliriz:
add_filter("body_class", function ($classes){
if (is_tax("product_cat")){
$catID = get_queried_object_id();
$parent_ids = get_ancestors($catID, "product_cat", "taxonomy");
$classes[] = "parentterm-" . $parent_ids[0];
}
return $classes;
});
Yukarıdaki örnek kodda kategorinin üst kategorisi var ise sayfanın body etiketine üst kategorisinin id numarasını($parent_ids[0]
) eklemiş oluyoruz. Birden fazla üst kategori olabilir bu durumda implode ile alabiliriz.
Ayrıca body’ye eklediğimiz class ile jQuery kullanarak aşağıdaki örnekte olduğu gibi çalışabiliriz:
if($('body').hasClass('tax-product_cat')){
let termid,matches=document.body.className.match(/(^|\s)parentterm-(\d+)(\s|$)/);
if(matches){
termid = matches[2];
$('li.cat-item-'+termid).addClass('current-cat');
}
}
Yukarıdaki jQuery kodunun Türkçesi; eğer WooCommerce kategorisi sayfasında isek, sayfanın body etiketinde parentterm-(rakamlar)
şeklinde bir class var ise, sayfadaki menüde bulunan kategori listesinde rakamın eşleştiği kategorinin bulunduğu li etiketine current-cat şeklinde bir class ekle.
Örneler böyle, WordPres varsayılan olarak alt kategori üst kategori şeklinde bir ekleme yapmamış aşağıda 2 ekstra fonksiyon ile WooCommerce alt kategori var mı ve alt kategori ise şeklinde kodlarımı paylaşıyorum:
/* Alt kategori mi? */
function is_subcategory($cat_id = null){
if (is_tax("product_cat")){
if (empty($cat_id)){
$cat_id = get_queried_object_id();
}
$cat = get_term(get_queried_object_id(), "product_cat");
if (empty($cat->parent)){
return false;
}else{
return true;
}
}
return false;
}
/* Alt kategorisi var mi? */
function cat_has_subcat($catId){
$args = [
"taxonomy" => "product_cat",
"orderby" => "name",
"parent" => $catId,
"show_count" => 0,
"pad_counts" => 0,
"hierarchical" => 1,
"title_li" => "",
"hide_empty" => false,
];
$cats = get_categories($args);
if (!empty($cats)){
return $catId;
}
}
Kolay gelsin.