Skip to content

Instantly share code, notes, and snippets.

@mikejolley
Created July 30, 2012 11:10
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mikejolley/3206230 to your computer and use it in GitHub Desktop.
Save mikejolley/3206230 to your computer and use it in GitHub Desktop.
Woo Breadcrumbs product categories, by Matt
// 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()
}
@ejntaylor
Copy link

Where to place this? Thanks

@ejntaylor
Copy link

Got it - Just added as a plugin. Worked a treat.

@aijinse
Copy link

aijinse commented Aug 20, 2012

I can't find the file to add this code...
Where to place this code?

Thanks.

@bettysteger
Copy link

i don't know why but i had to replace line 33 with:

$trail_end = get_the_title($post->ID);

@tuegithub
Copy link

hoe to add as a plugin or where to place code?

Thanks

@MaluNoPeleke
Copy link

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 :)

@mikejolley
Copy link
Author

@9studios
Copy link

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

@theronburrough
Copy link

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.)

@mixmastermichael
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment