yan-k
9/22/2017 - 8:29 AM

WooCommerce Trails Length

WooCommerce Trails Length

<?php

/**
	 * Modify Trail Length for Breadcrumbs in WooCommerce
	 */
	if(!function_exists('avia_woocommerce_breadcrumb')) {
		add_filter('avia_breadcrumbs_trail','avia_woocommerce_breadcrumb');

		function avia_woocommerce_breadcrumb($trail)
		{
			global $avia_config;

			if(is_woocommerce())
			{

				$home 		= $trail[0];
				$last 		= array_pop($trail);
				$shop_id 	= woocommerce_get_page_id('shop');
				$taxonomy 	= "product_cat";

				// on the shop frontpage simply display the shop name, rather than shop name + "All Products"
				if(is_shop())
				{
					if(!empty($shop_id) && $shop_id  != -1)  $trail = array_merge( $trail, avia_breadcrumbs_get_parents( $shop_id ) );
					$last = "";

					if(is_search())
					{
						$last = __('Search results for:','avia_framework').' '.esc_attr($_GET['s']);
					}
				}

				// on the product page single page modify the breadcrumb to read [home] [if available:parent shop pages] [shop] [if available:parent categories] [category] [title]
				if(is_product())
				{
					//fetch all product categories and search for the ones with parents. if none are avalaible use the first category found
					$product_category = $parent_cat = array();
					$temp_cats = get_the_terms(get_the_ID(), $taxonomy);

					if(!empty($temp_cats))
					{
						foreach($temp_cats as $key => $cat)
						{
							if($cat->parent != 0 && !in_array($cat->term_taxonomy_id, $parent_cat))
							{
								$product_category[] = $cat;
								$parent_cat[] = $cat->parent;
							}
						}

						//if no categories with parents use the first one
						if(empty($product_category)) $product_category[] = reset($temp_cats);

					}
					//unset the trail and build our own
					unset($trail);

					$trail[0] = $home;
					if(!empty($shop_id) && $shop_id  != -1)    $trail = array_merge( $trail, avia_breadcrumbs_get_parents( $shop_id ) );
					if(!empty($parent_cat)) $trail = array_merge( $trail, avia_breadcrumbs_get_term_parents( $parent_cat[0] , $taxonomy ) );
					if(!empty($product_category)) $trail[] = '<a href="' . get_term_link( $product_category[0]->slug, $taxonomy ) . '" title="' . esc_attr( $product_category[0]->name ) . '">' . $product_category[0]->name . '</a>';
				}


				// add the [shop] trail to category/tag pages: [home] [if available:parent shop pages] [shop] [if available:parent categories] [category/tag]
				if(is_product_category() || is_product_tag())
				{
					if(!empty($shop_id) && $shop_id  != -1)
					{
						$shop_trail = avia_breadcrumbs_get_parents( $shop_id ) ;

						if( isset($_GET['test']) ) {
							print_r($shop_trail);
						}

						array_splice($trail, 1, 0, $shop_trail);
					}
				}

				if(is_product_tag())
				{
					$last = __("Tag",'avia_framework').": ".$last;
				}

				if(count( $trail ) > 3 ) {
					unset($trail[0]);
					unset($trail[1]);
					unset($trail[2]);
				}

				if( !is_product() ) {
					if(!empty($last)) $trail[] = $last;
				}
			}

			return $trail;
		}

	}