block_core_breadcrumbs_get_archive_breadcrumbs() │ WP 7.0.0 Generates breadcrumb items for archive pages.
Handles taxonomy archives, post type archives, date archives, and author archives. For hierarchical taxonomies, includes ancestor terms in the breadcrumb trail.
Returns
Array . Array of breadcrumb item data.
Usage
block_core_breadcrumbs_get_archive_breadcrumbs(); Changelog
block_core_breadcrumbs_get_archive_breadcrumbs() block core breadcrumbs get archive breadcrumbs code
WP 7.0
function block_core_breadcrumbs_get_archive_breadcrumbs() {
$breadcrumb_items = array();
// Date archive (check first since it doesn't have a queried object).
if ( is_date() ) {
$year = get_query_var( 'year' );
$month = get_query_var( 'monthnum' );
$day = get_query_var( 'day' );
// Fallback to 'm' query var for plain permalinks.
// Plain permalinks use ?m=YYYYMMDD format instead of separate query vars.
if ( ! $year ) {
$m = get_query_var( 'm' );
if ( $m ) {
$year = substr( $m, 0, 4 );
$month = substr( $m, 4, 2 );
$day = (int) substr( $m, 6, 2 );
}
}
$is_paged = block_core_breadcrumbs_is_paged();
if ( $year ) {
if ( $month ) {
// Year is linked if we have month.
$breadcrumb_items[] = array(
'label' => $year,
'url' => get_year_link( $year ),
);
if ( $day ) {
// Month is linked if we have day.
$breadcrumb_items[] = array(
'label' => date_i18n( 'F', mktime( 0, 0, 0, $month, 1, $year ) ),
'url' => get_month_link( $year, $month ),
);
// Add day (current if not paginated, link if paginated).
$breadcrumb_items[] = block_core_breadcrumbs_create_item(
$day,
$is_paged
);
} else {
// Add month (current if not paginated, link if paginated).
$breadcrumb_items[] = block_core_breadcrumbs_create_item(
date_i18n( 'F', mktime( 0, 0, 0, $month, 1, $year ) ),
$is_paged
);
}
} else {
// Add year (current if not paginated, link if paginated).
$breadcrumb_items[] = block_core_breadcrumbs_create_item(
$year,
$is_paged
);
}
}
// Add pagination breadcrumb if on a paged date archive.
if ( $is_paged ) {
$breadcrumb_items[] = block_core_breadcrumbs_create_page_number_item();
}
return $breadcrumb_items;
}
// For other archive types, we need a queried object.
$queried_object = get_queried_object();
if ( ! $queried_object ) {
return array();
}
$is_paged = block_core_breadcrumbs_is_paged();
// Taxonomy archive (category, tag, custom taxonomy).
if ( $queried_object instanceof WP_Term ) {
$term = $queried_object;
$taxonomy = $term->taxonomy;
// Add hierarchical term ancestors if applicable.
$breadcrumb_items = array_merge(
$breadcrumb_items,
block_core_breadcrumbs_get_term_ancestors_items( $term->term_id, $taxonomy )
);
// Add current term (current if not paginated, link if paginated).
$breadcrumb_items[] = block_core_breadcrumbs_create_item(
$term->name,
$is_paged
);
} elseif ( is_post_type_archive() ) {
// Post type archive.
$post_type = get_query_var( 'post_type' );
if ( is_array( $post_type ) ) {
$post_type = reset( $post_type );
}
$post_type_object = get_post_type_object( $post_type );
/** This filter is documented in wp-includes/general-template.php */
$title = apply_filters( 'post_type_archive_title', $post_type_object->labels->archives, $post_type ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
if ( $post_type_object ) {
// Add post type (current if not paginated, link if paginated).
$breadcrumb_items[] = block_core_breadcrumbs_create_item(
$title ? $title : $post_type_object->labels->archives,
$is_paged
);
}
} elseif ( is_author() ) {
// Author archive.
$author = $queried_object;
// Add author (current if not paginated, link if paginated).
$breadcrumb_items[] = block_core_breadcrumbs_create_item(
$author->display_name,
$is_paged
);
}
// Add pagination breadcrumb if on a paged archive.
if ( $is_paged ) {
$breadcrumb_items[] = block_core_breadcrumbs_create_page_number_item();
}
return $breadcrumb_items;
}