File: /var/www/html/insiders/wp-load/wp-content/plugins/breadly/block-library/breadcrumbs.php
<?php
/**
* Renders the `gtm/breadcrumbs` block on the server.
*
* @param array $attributes Block attributes.
* @param string $content Block default content.
* @param WP_Block $block Block instance.
* @return string Returns the breadcrumbs.
*/
function gtm_render_block_breacrumbs( $attr, $content, $block ) {
$wrapper_attributes = get_block_wrapper_attributes( ['class' => ''] );
$inner_html = '';
ob_start();
gtm_get_breadcrumbs( [
'delimiter' => $attr['separatorSymbol'] ?: '›',
] );
$inner_html = ob_get_clean();
return sprintf(
'<div %1$s>%2$s</div>',
$wrapper_attributes,
$inner_html
);
}
/**
* Registers the `gtm/breadcrumbs` block on the server.
*/
function gtm_register_block_breadcrumbs() {
gtm_register_block_type( 'breadcrumbs', [
'render_callback' => 'gtm_render_block_breacrumbs',
] );
}
add_action( 'init', 'gtm_register_block_breadcrumbs', 20 );
add_filter( 'gtm.BlockStyleCompiler.gtm/breadcrumbs', 'gtm_compile_block_css_breadcrumbs', 10, 3 );
function gtm_compile_block_css_breadcrumbs( $output, $attributes, $blockName ) {
$block_style = ['classes' => [], 'style' => []];
$block_style['classes'][] = 'gtm-block';
gtm_css_compileCssVar( $block_style, "breadbrumbs-separator-spacing", gtm_css_parseSpacingValue( $attributes['separatorSpacing'] ) );
gtm_css_compileCssVar( $block_style, "breadbrumbs-link-color", gtm_css_parseColorValue( $attributes['linkColor'] ) );
gtm_css_compileCssVar( $block_style, "breadbrumbs-link-hover-color", gtm_css_parseColorValue( $attributes['linkHoverColor'] ) );
gtm_css_compileCssVar( $block_style, "breadbrumbs-separator-color", gtm_css_parseColorValue( $attributes['separatorColor'] ) );
gtm_css_compileCssVar( $block_style, "breadbrumbs-page-title-color", gtm_css_parseColorValue( $attributes['pageTitleColor'] ) );
// Apply to output
$block_style['style'] = ['{{BLOCK}}' => $block_style['style']];
return [
'classes' => array_merge( $output['classes'], $block_style['classes'] ),
'style' => array_replace_recursive( $output['style'], $block_style['style'] ),
];
}
function gtm_get_breadcrumbs( $args ) {
$args = wp_parse_args( ( $args ), [
'delimiter' => '›',
] );
$delimiter = '<span class="gtm-breadcrumbs__separator" aria-hidden="true">' . $args['delimiter'] . '</span>';
$home_icon = null;
$home_text = esc_html__( 'Home', 'gutenmate' );
$before = '<span class="gtm-breadcrumbs__page-title" title="%1$s" aria-label="%1$s">';
$after = '</span>';
$breadcrumbs_id = wp_unique_id( 'breadbrumbs-' );
$breadcrumbs = [];
# WordPress breadcrumbs ----------
if ( ! is_home() && ! is_front_page() || is_paged() ) {
$post = get_post();
$home_url = esc_url( home_url( '/' ) );
# Home ----------
$breadcrumbs[] = [
'url' => $home_url,
'name' => $home_text,
'icon' => $home_icon,
];
# Category ----------
if ( is_category() ) {
$category = get_query_var( 'cat' );
$category = get_category( $category );
if ( $category->parent !== 0 ) {
$parent_categories = array_reverse( get_ancestors( $category->cat_ID, 'category' ) );
foreach ( $parent_categories as $parent_category ) {
$breadcrumbs[] = [
'url' => get_term_link( $parent_category, 'category' ),
'name' => get_cat_name( $parent_category ),
];
}
}
$breadcrumbs[] = [
'name' => get_cat_name( $category->cat_ID ),
];
}
# Day ----------
elseif ( is_day() ) {
$breadcrumbs[] = [
'url' => get_year_link( get_the_time( 'Y' ) ),
'name' => get_the_time( 'Y' ),
];
$breadcrumbs[] = [
'url' => get_month_link( get_the_time( 'Y' ), get_the_time( 'm' ) ),
'name' => get_the_time( 'F' ),
];
$breadcrumbs[] = [
'name' => get_the_time( 'd' ),
];
}
# Month ----------
elseif ( is_month() ) {
$breadcrumbs[] = [
'url' => get_year_link( get_the_time( 'Y' ) ),
'name' => get_the_time( 'Y' ),
];
$breadcrumbs[] = [
'name' => get_the_time( 'F' ),
];
}
# Year ----------
elseif ( is_year() ) {
$breadcrumbs[] = [
'name' => get_the_time( 'Y' ),
];
}
# Tag ----------
elseif ( is_tag() ) {
$breadcrumbs[] = [
'name' => get_the_archive_title(),
];
}
# Author ----------
elseif ( is_author() ) {
$author = get_query_var( 'author' );
$author = get_userdata( $author );
$breadcrumbs[] = [
'name' => $author->display_name,
];
}
# Search ----------
elseif ( is_search() ) {
$breadcrumbs[] = [
'name' => sprintf( esc_html__( 'Search Results for: %s', 'gutenmate' ), get_search_query() ),
];
}
# 404 ----------
elseif ( is_404() ) {
$breadcrumbs[] = [
'name' => esc_html__( 'Nothing Found', 'gutenmate' ),
];
}
# BuddyPress ----------
elseif ( function_exists( 'bp_current_component' ) && bp_current_component() ) {
$breadcrumbs[] = [
'name' => get_the_title(),
];
}
# Pages ----------
elseif ( is_page() ) {
if ( $post->post_parent ) {
$parent_id = $post->post_parent;
$page_parents = [];
while ( $parent_id ) {
$get_page = get_page( $parent_id );
$parent_id = $get_page->post_parent;
$page_parents[] = [
'url' => get_permalink( $get_page->ID ),
'name' => get_the_title( $get_page->ID ),
];
}
$page_parents = array_reverse( $page_parents );
foreach ( $page_parents as $single_page ) {
$breadcrumbs[] = [
'url' => $single_page['url'],
'name' => $single_page['name'],
];
}
}
$breadcrumbs[] = [
'name' => get_the_title(),
];
}
# Attachment ----------
elseif ( is_attachment() ) {
if ( ! empty( $post->post_parent ) ) {
$parent = get_post( $post->post_parent );
$breadcrumbs[] = [
'url' => get_permalink( $parent ),
'name' => $parent->post_title,
];
}
$breadcrumbs[] = [
'name' => get_the_title(),
];
}
# Single Posts ----------
elseif ( is_singular() ) {
# Get the main Post type archive link ----------
if ( $archive_link = get_post_type_archive_link( get_post_type() ) ) {
$post_type = get_post_type_object( get_post_type() );
if ( $post_type->name !== 'post' ) {
$breadcrumbs[] = [
'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 ) {
$breadcrumbs[] = [
'url' => get_term_link( $term ),
'name' => $term->name,
];
break;
}
}
}
$breadcrumbs[] = [
'name' => get_the_title(),
];
}
# Print the BreadCrumb
if ( ! empty( $breadcrumbs ) ) {
$counter = 0;
$item_list_elements = [];
$breadcrumbs_schema = [
'@context' => 'http://schema.org',
'@type' => 'BreadcrumbList',
'@id' => '#' . esc_attr( $breadcrumbs_id ),
];
echo '<nav id="' . esc_attr( $breadcrumbs_id ) . '">';
foreach ( $breadcrumbs as $item ) {
$counter++;
if ( ! empty( $item['url'] ) ) {
$icon = ! empty( $item['icon'] ) ? $item['icon'] . ' ' : '';
echo '<a href="' . esc_url( $item['url'] ) . '" title="' . esc_attr( $item['name'] ) . '">' . $icon . $item['name'] . '</a>' . $delimiter;
} else {
echo wp_kses_post( sprintf( $before, esc_attr( $item['name'] ) ) . $item['name'] . $after );
global $wp;
$item['url'] = esc_url( home_url( add_query_arg( [], $wp->request ) ) );
}
$item_list_elements[] = [
'@type' => 'ListItem',
'position' => $counter,
'item' => [
'name' => str_replace( $home_icon . ' ', '', $item['name'] ),
'@id' => $item['url'],
],
];
}
echo '</nav>';
# To remove the latest current elemnt -----------
$latest_element = array_pop( $item_list_elements );
if ( get_option( 'gtm_seo_enable_post_rich_snippets', true ) ) {
if ( ! empty( $item_list_elements ) && is_array( $item_list_elements ) ) {
$breadcrumbs_schema['itemListElement'] = $item_list_elements;
echo '<script type="application/ld+json">' . wp_json_encode( $breadcrumbs_schema ) . '</script>';
}
}
}
}
wp_reset_postdata();
}