<?php
$sparta_sep   = '<i class="fa fa-angle-right" aria-hidden="true"></i>';
$sparta_class = 'sparta-breadcrumbs clear';
$sparta_home  = esc_html__( 'Home', 'sparta' );
$sparta_blog  = esc_html__( 'Blog', 'sparta' );
$sparta_shop  = esc_html__( 'Shop', 'sparta' );

// Get the query & post information
global $post, $wp_query;

// Get post category
$sparta_category = get_the_category();


// Get product category
$sparta_product_cat = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );

if ( $sparta_product_cat ) {
	$sparta_tax_title = $sparta_product_cat->name;
}

$sparta_output = '';

// Build the breadcrums
$sparta_output .= '<ul class="' . esc_attr( $sparta_class ) . '">';

// Do not display on the homepage
if ( ! is_front_page() ) {

	if ( is_home() ) {

		// Home page
		$sparta_output .= '<li class="item home"><a href="' . esc_url( get_home_url() ) . '" title="' . esc_attr( $sparta_home ) . '">' . $sparta_home . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_blog . ' </li>';

	} elseif ( function_exists( 'is_shop' ) && is_shop() ) {

		$sparta_output .= '<li class="item">' . $sparta_shop . '</li>';

	} else if ( function_exists( 'is_product' ) && is_product() || function_exists( 'is_cart' ) && is_cart() || function_exists( 'is_checkout' ) && is_checkout()  || function_exists( 'is_account_page' ) && is_account_page() ) {

		$sparta_output .= '<li class="item"><a href="' . esc_url( get_post_type_archive_link( 'product' ) ) . '" title="' . esc_attr( $sparta_home ) . '">' . $sparta_shop . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';
		$sparta_output .= '<li class="item">' . get_the_title() . '</li>';

	} else if ( function_exists( 'is_product_category' ) && is_product_category() ) {

		$sparta_output .= '<li class="item"><a href="' . esc_url( get_post_type_archive_link( 'product' ) ) . '" title="' . esc_attr( $sparta_home ) . '">' . $sparta_shop . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';
		$sparta_output .= '<li class="item">' . $sparta_tax_title . '</li>';

	} else if ( function_exists( 'is_product_tag' ) && is_product_tag() ) {

		$sparta_output .= '<li class="item"><a href="' . esc_url( get_post_type_archive_link( 'product' ) ) . '" title="' . esc_attr( $sparta_home ) . '">' . $sparta_shop . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';
		$sparta_output .= '<li class="item">' . $sparta_tax_title . '</li>';

	} else if ( is_post_type_archive() ) {

		// Home page
		$sparta_output .= '<li class="item home"><a href="' . esc_url( get_home_url() ) . '" title="' . esc_attr( $sparta_home ) . '">' . $sparta_home . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';

		ob_start();
		post_type_archive_title();

		$sparta_output .= '<li class="item current">' . ob_get_clean() . '</li>';

	}
	else if ( is_single() ) {

		$post_type = get_post_type();
		// Home page
		$sparta_output .= '<li class="item home"><a href="' . esc_url( get_home_url() ) . '" title="' . esc_attr( $sparta_home ) . '">' . $sparta_home . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';

		if ( 'post' == $post_type && ! empty( $sparta_category ) ) {
			// First post category
			$sparta_output .= '<li class="item"><a href="' . esc_url( get_category_link( $sparta_category[0]->term_id ) ) . '" title="' . esc_attr( $sparta_category[0]->cat_name ) . '">' . $sparta_category[0]->cat_name . '</a></li>';
			$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';

		} 


		$sparta_output .= '<li class="item current">' . get_the_title() . '</li>';

	} else if ( is_archive() && is_tax() && ! is_category() && ! is_tag() ) {
		$tax_object = get_queried_object();

		// Home page
		$sparta_output .= '<li class="item home"><a href="' . esc_url( get_home_url() ) . '" title="' . esc_attr( $sparta_home ) . '">' . $sparta_home . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';

		if ( ! empty( $tax_object ) ) {
			$sparta_output .= '<li class="item current">' . esc_html( $tax_object->name ) . '</li>';
		}

	} else if ( is_category() ) {
		// Home page
		$sparta_output .= '<li class="item home"><a href="' . esc_url( get_home_url() ) . '" title="' . esc_attr( $sparta_home ) . '">' . $sparta_home . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';

		// Category page
		$sparta_output .= '<li class="item current">' . single_cat_title( '', false ) . '</li>';

	} else if ( is_page() ) {

		$sparta_output .= '<li class="item home"><a href="' . esc_url( get_home_url() ) . '" title="' . esc_attr( $sparta_home ) . '">' . $sparta_home . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';

		// Standard page
		if ( $post->post_parent ) {

			// If child page, get parents
			$sparta_anc = get_post_ancestors( $post->ID );

			// Get parents in the right order
			$sparta_anc = array_reverse( $sparta_anc );

			// Parent page loop
			foreach ( $sparta_anc as $sparta_ancestor ) {
				$sparta_parents = '<li class="item"><a href="' . esc_url( get_permalink( $sparta_ancestor ) ) . '" title="' . esc_attr( get_the_title( $sparta_ancestor ) ) . '">' . get_the_title( $sparta_ancestor ) . '</a></li>';
				$sparta_parents .= '<li class="separator"> ' . $sparta_sep . ' </li>';
			}

			// Display parent pages
			$sparta_output .= $sparta_parents;

			// Current page
			$sparta_output .= '<li class="item current"> ' . get_the_title() . '</li>';

		} else {

			// Just display current page if not parents
			$sparta_output .= '<li class="item current"> ' . get_the_title() . '</li>';

		}

	} else if ( is_tag() ) {

		// Tag page
		$sparta_output .= '<li class="item home"><a href="' . esc_url( get_home_url() ) . '" title="' . esc_attr( $sparta_home ) . '">' . $sparta_home . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';

		// Get tag information
		$sparta_term_id  = get_query_var( 'tag_id' );
		$sparta_taxonomy = 'post_tag';
		$sparta_args     = 'include=' . $sparta_term_id;
		$sparta_terms    = get_terms( $sparta_taxonomy, $sparta_args );

		// Display the tag name
		if ( isset( $sparta_terms[0]->name ) )
			$sparta_output .= '<li class="item current">' . $sparta_terms[0]->name . '</li>';

	} elseif ( is_day() ) {

		// Year link
		$sparta_output .= '<li class="item"><a href="' . esc_url( get_year_link( get_the_time( 'Y' ) ) ) . '" title="' . esc_attr( get_the_time( 'Y' ) ) . '">' . get_the_time( 'Y' ) . esc_html__( ' Archives', 'sparta' ) . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';

		// Month link
		$sparta_output .= '<li class="item"><a href="' . esc_url( get_month_link( get_the_time('Y'), get_the_time( 'm' ) ) ) . '" title="' . esc_attr( get_the_time( 'M' ) ) . '">' . get_the_time( 'M' ) . esc_html__( ' Archives', 'sparta' ) . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';

		// Day display
		$sparta_output .= '<li class="item current"> ' . get_the_time('jS') . ' ' . get_the_time('M') . esc_html__( ' Archives', 'sparta' ) . '</li>';

	} else if ( is_month() ) {

		// Month Archive

		// Year link
		$sparta_output .= '<li class="item"><a href="' . esc_url( get_year_link( get_the_time( 'Y' ) ) ) . '" title="' . esc_attr( get_the_time( 'Y' ) ) . '">' . get_the_time( 'Y' ) . esc_html__( ' Archives', 'sparta' ) . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';

		// Month display
		$sparta_output .= '<li class="item">' . get_the_time( 'M' ) . esc_html__( ' Archives', 'sparta' ) . '</li>';

	} else if ( is_year() ) {

		// Display year archive
		$sparta_output .= '<li class="item current">' . get_the_time('Y') . esc_html__( 'Archives', 'sparta' ) . '</li>';

	} else if ( is_author() ) {

		// Home page
		$sparta_output .= '<li class="item home"><a href="' . esc_url( get_home_url() ) . '" title="' . esc_attr( $sparta_home ) . '">' . $sparta_home . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';

		// Get the author information
		global $author;
		$sparta_userdata = get_userdata( $author );

		// Display author name
		$sparta_output .= '<li class="item current">' . esc_html__( 'Author: ', 'sparta' ) . '<a href="' . get_author_posts_url( $sparta_userdata->ID, $sparta_userdata->nice_name ) . '">' . $sparta_userdata->display_name . '</a></li>';

	} else if ( get_query_var( 'paged' ) ) {

		// Paginated archives
		$sparta_output .= '<li class="item current">' .  esc_html__( 'Page', 'sparta' ) . ' ' . get_query_var( 'paged', 'sparta' ) . '</li>';

	} else if ( is_search() ) {

		// Search results page
		$sparta_output .= '<li class="item current">' .  esc_html__( 'Keyword: ', 'sparta' ) . get_search_query() . '</li>';

	} elseif ( is_404() ) {

		// 404 page
		$sparta_output .= '<li class="item home"><a href="' . esc_url( get_home_url() ) . '" title="' . esc_attr( $sparta_home ) . '">' . $sparta_home . '</a></li>';
		$sparta_output .= '<li class="separator"> ' . $sparta_sep . ' </li>';
		$sparta_output .= '<li class="item current">' . esc_html__( 'Error 404', 'sparta' ) . '</li>';
	}

}

$sparta_output .= '</ul>';

echo wp_kses_post( $sparta_output );
