You are viewing an old revision of this post, from May 23, 2014 @ 10:31:48. See below for differences between this version and the current revision.

WooCommerce Breadcrumbs – Add categories

Customers generally prefer product breadcrumbs that show the steps it took to get to the product they are viewing, so they can backtrack easily.

Breadcrumbs, if you aren’t sure, are the row of links above the main content, below the header, that look like: Home > Catalog > Clothes > Men’s > Shirts > Blue Shirt

For whatever reason, WooCommerce wasn’t built with smart breadcrumbs. They look more like this: Home > Products > Blue Shirt

Not so handy if you want to go right back to the main “Clothes” section, eh?

Tom Harrigan was awesome enough to post on GitHub, the fix for this. It goes in your theme’s (your current theme, not a plugin) function.php (use FTP and back it up first!) file.

[php]// 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 = get_the_title($post->ID); // 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() }[/php]

Revisions

  • May 23, 2014 @ 10:32:07 [Current Revision] by PeterLugg
  • May 23, 2014 @ 10:31:48 by PeterLugg

Revision Differences

There are no differences between the May 23, 2014 @ 10:31:48 revision and the current revision. (Maybe only post meta information was changed.)

Tags: ,

No comments yet.

Leave a Reply