/';
$home_text = Helper::get_option( 'translate_home' ) ?: esc_html__( 'Home', 'blogsy' );
$breadcrumb = [];
$post = get_post();
$home_url = esc_url( home_url( '/' ) );
// Home.
$breadcrumb[] = [
'url' => $home_url,
'name' => $home_text,
];
// Category.
if ( is_category() ) {
$category = get_query_var( 'cat' );
$category = get_category( $category );
if ( 0 !== $category->parent ) {
$parent_categories = array_reverse( get_ancestors( $category->cat_ID, 'category' ) );
foreach ( $parent_categories as $parent_category ) {
$breadcrumb[] = [
'url' => get_term_link( $parent_category, 'category' ),
'name' => get_cat_name( $parent_category ),
];
}
}
$breadcrumb[] = [
'name' => get_cat_name( $category->cat_ID ),
];
} elseif ( is_day() ) { // Day.
$breadcrumb[] = [
'url' => get_year_link( get_the_time( 'Y' ) ),
'name' => get_the_time( 'Y' ),
];
$breadcrumb[] = [
'url' => get_month_link( get_the_time( 'Y' ), get_the_time( 'm' ) ),
'name' => get_the_time( 'F' ),
];
$breadcrumb[] = [
'name' => get_the_time( 'd' ),
];
} elseif ( is_month() ) { // Month.
$breadcrumb[] = [
'url' => get_year_link( get_the_time( 'Y' ) ),
'name' => get_the_time( 'Y' ),
];
$breadcrumb[] = [
'name' => get_the_time( 'F' ),
];
} elseif ( is_year() ) { // Year.
$breadcrumb[] = [
'name' => get_the_time( 'Y' ),
];
} elseif ( is_tag() ) { // Tag.
$breadcrumb[] = [
'name' => get_the_archive_title(),
];
} elseif ( is_author() ) { // Author.
$author = get_queried_object();
$breadcrumb[] = [
'name' => $author->display_name,
];
} elseif ( is_search() ) { // Search.
$breadcrumb[] = [
'name' => ( Helper::get_option( 'translate_search_for' ) ?: esc_html__( 'Search Results for', 'blogsy' ) ) . ' ' . get_search_query(),
];
} elseif ( is_404() ) { // 404.
$breadcrumb[] = [
'name' => Helper::get_option( 'translate_nothing_found' ) ?: esc_html__( 'Nothing Found!', 'blogsy' ),
];
} elseif ( is_page() ) { // Pages.
$breadcrumb[] = [
'name' => get_the_title(),
];
} elseif ( is_attachment() ) { // Attachment.
$breadcrumb[] = [
'name' => get_the_title(),
];
} elseif ( is_singular() ) { // Single Posts.
// Single Post.
if ( 'post' === get_post_type() ) {
$category = get_the_category()[0];
if ( 0 !== $category->parent ) {
$parent_categories = array_reverse( get_ancestors( $category->cat_ID, 'category' ) );
foreach ( $parent_categories as $parent_category ) {
$breadcrumb[] = [
'url' => get_term_link( $parent_category, 'category' ),
'name' => get_cat_name( $parent_category ),
];
}
}
$breadcrumb[] = [
'url' => get_term_link( $category->cat_ID, 'category' ),
'name' => get_cat_name( $category->cat_ID ),
];
} else {
// Custom Post Type.
$archive_link = get_post_type_archive_link( get_post_type() );
// Get the main Post type archive link.
if ( $archive_link ) {
$post_type = get_post_type_object( get_post_type() );
$breadcrumb[] = [
'url' => $archive_link,
'name' => $post_type->labels->singular_name,
];
}
// Get custom Post Types taxonomies.
$taxonomies = get_object_taxonomies( $post, 'objects' );
if ( ! empty( $taxonomies ) && is_array( $taxonomies ) ) {
foreach ( $taxonomies as $taxonomy ) {
if ( $taxonomy->hierarchical ) {
$taxonomy_name = $taxonomy->name;
break;
}
}
}
if ( ! empty( $taxonomy_name ) ) {
$custom_terms = get_the_terms( $post, $taxonomy_name );
if ( ! empty( $custom_terms ) && ! is_wp_error( $custom_terms ) ) {
foreach ( $custom_terms as $term ) {
$breadcrumb[] = [
'url' => get_term_link( $term ),
'name' => $term->name,
];
break;
}
}
}
}
$breadcrumb[] = [
'name' => get_the_title(),
];
} elseif ( is_archive() ) {
$breadcrumb[] = [
'name' => get_the_archive_title(),
];
}
// Print the BreadCrumb.
$counter = 0;
$item_list_elements = [];
$breadcrumb_schema = [
'@context' => 'http://schema.org',
'@type' => 'BreadcrumbList',
'@id' => '#Breadcrumb',
];
echo '';
if ( Helper::get_option( 'breadcrumb_schema' ) ) {
// To remove the latest current element.
$latest_element = array_pop( $item_list_elements );
if ( [] !== $item_list_elements && is_array( $item_list_elements ) ) {
$breadcrumb_schema['itemListElement'] = $item_list_elements;
echo '';
}
}
wp_reset_postdata();
}