-
-
Save danjjohnson/5236857 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment