Just a question : I want to use get_category_parents()
to display a breadcrumb on a category archive page, but with no link on the current displayed category (SEO purposes, because they say that’s a link to itself. I’m not sure search engines are that stupid, but anyway).
Like this :
link_home » link_cat1 » link_subcat1 » nolink_subsubcat1
get_category_parents()
is perfect for that, but there’s only two options : with links and without links.
What I want is links BUT on the last item.
The function is returning a string, not a object or array, so I cannot remove the last item.
I could do with regex by searching with the »
separator and remove last link that way, but i’m pretty bad with regexes (if you know good references for that, i’m interested !).
I know the obvious answer is to create a custom function using get_ancestors()
and a loop , then simply adding after the current category name.
But I wanted to know is there is some more simplier way, but just hooking get_category_parents()
to not adding link to the last item ?
Thank you for any insight.
Regards
Simon
4 Answers
I wouldn’t consider this any better/worse than Kaiser’s option, but just different. Why not use get_category_parents
on the parent category and then (optionally) append the current category?
I haven’t tested this, but something like the following should work:
$cat_id=7;//current category's ID (e.g. 7)
$separator="»";//The separator to use
$category = get_category($cat_id);//$category is the current category object
$parent_id = $category[0]->category_parent //category's parent ID
$ancestors = get_category_parents($parent_id, true, $separator);
Then optionally add the current category’s name:
if($ancestors){
$breadcrumb = $ancestors.$separator.' <span class="active-cat">'.single_cat_title().'</span>';
}else{
$breadcrumb = '<span class="active-cat">'.single_cat_title().'</span>';
}
echo $breadcrumb;
EDIT:
It turns out this almost exactly how WordPress produces the output: get_category_parents
calls itself recursively (see here), so with this method you are essentially ‘stopping it early’, and manually completing it. There are no hooks that can achieve this effect however.