-
-
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() | |
| } |
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
I can't find the file to add this code...
Where to place this code?
Thanks.