-
-
Save mikejolley/3206230 to your computer and use it in GitHub Desktop.
// Add product categories to the "Product" breadcrumb in WooCommerce. | |
// Get breadcrumbs on product pages that read: Home > Shop > Product category > Product Name | |
add_filter( 'woo_breadcrumbs_trail', 'woo_custom_breadcrumbs_trail_add_product_categories', 20 ); | |
function woo_custom_breadcrumbs_trail_add_product_categories ( $trail ) { | |
if ( ( get_post_type() == 'product' ) && is_singular() ) { | |
global $post; | |
$taxonomy = 'product_cat'; | |
$terms = get_the_terms( $post->ID, $taxonomy ); | |
$links = array(); | |
if ( $terms && ! is_wp_error( $terms ) ) { | |
$count = 0; | |
foreach ( $terms as $c ) { | |
$count++; | |
if ( $count > 1 ) { continue; } | |
$parents = woo_get_term_parents( $c->term_id, $taxonomy, true, ', ', $c->name, array() ); | |
if ( $parents != '' && ! is_wp_error( $parents ) ) { | |
$parents_arr = explode( ', ', $parents ); | |
foreach ( $parents_arr as $p ) { | |
if ( $p != '' ) { $links[] = $p; } | |
} | |
} | |
} | |
// Add the trail back on to the end. | |
// $links[] = $trail['trail_end']; | |
$trail_end = $trail[count( $trail ) - 1]; | |
// Add the new links, and the original trail's end, back into the trail. | |
array_splice( $trail, 2, count( $trail ) - 1, $links ); | |
$trail['trail_end'] = $trail_end; | |
} | |
} | |
return $trail; | |
} // End woo_custom_breadcrumbs_trail_add_product_categories() | |
/** | |
* Retrieve term parents with separator. | |
* | |
* @param int $id Term ID. | |
* @param string $taxonomy. | |
* @param bool $link Optional, default is false. Whether to format with link. | |
* @param string $separator Optional, default is '/'. How to separate terms. | |
* @param bool $nicename Optional, default is false. Whether to use nice name for display. | |
* @param array $visited Optional. Already linked to terms to prevent duplicates. | |
* @return string | |
*/ | |
if ( ! function_exists( 'woo_get_term_parents' ) ) { | |
function woo_get_term_parents( $id, $taxonomy, $link = false, $separator = '/', $nicename = false, $visited = array() ) { | |
$chain = ''; | |
$parent = &get_term( $id, $taxonomy ); | |
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 .= woo_get_term_parents( $parent->parent, $taxonomy, $link, $separator, $nicename, $visited ); | |
} | |
if ( $link ) { | |
$chain .= '<a href="' . get_term_link( $parent, $taxonomy ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$parent->name.'</a>' . $separator; | |
} else { | |
$chain .= $name.$separator; | |
} | |
return $chain; | |
} // End woo_get_term_parents() | |
} |
Got it - Just added as a plugin. Worked a treat.
I can't find the file to add this code...
Where to place this code?
Thanks.
i don't know why but i had to replace line 33 with:
$trail_end = get_the_title($post->ID);
hoe to add as a plugin or where to place code?
Thanks
Thanks for the code!
It works great but I miss a breadcrumb for categories:
Currently:
Home / Products -> click on a product category -> Home / Product Category
Should be:
Home / Products -> click on a product category -> Home / Products / Product Category
How can I achieve that?
For everyone who doesn't know how to add this code: look for the functions.php of your active theme :)
@mattyza ^?
THX for the code !
Any idea how to fix the category issue when you click on a category in the url instead of Shop there is product-category
Thanks! I put this code in my a Mystile child theme functions.php and it worked great. (I had to remove a comma from a category.)
so... I've added this code, but I too just don't know where this is to be retrieved on the product page. Can someone please explain that? Thanks
Where to place this? Thanks