HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
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();

}