Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Add Taxonomy Term to a Node's Breadcrumb in Drupal 8
// src/Breadcrumbs.php
namespace Drupal\modulename;
use Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Breadcrumb\Breadcrumb;
use Drupal\Core\Link;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\node\NodeInterface;
* Class Breadcrumbs.
* @package Drupal\modulename
class Breadcrumbs implements BreadcrumbBuilderInterface {
use StringTranslationTrait;
* {@inheritdoc}
public function applies(RouteMatchInterface $route_match) {
return $route_match->getRouteName() == 'entity.node.canonical'
&& $route_match->getParameter('node') instanceof NodeInterface;;
* {@inheritdoc}
public function build(RouteMatchInterface $route_match) {
$node = $route_match->getParameter('node');
$breadcrumb = new Breadcrumb();
// By setting a "cache context" to the "url", each requested URL gets it's own cache.
// This way a single breadcrumb isn't cached for all pages on the site.
// By adding "cache tags" for this specific node, the cache is invalidated when the node is edited.
// Add "Home" breadcrumb link.
$breadcrumb->addLink(Link::createFromRoute($this->t('Home'), '<front>'));
// Given we have a taxonomy term reference field named "field_section", and that field has data,
// Add that term as a breadcrumb link.
if (!empty($node->field_section->entity)) {
return $breadcrumb;
class: Drupal\modulename\Breadcrumbs
- { name: breadcrumb_builder, priority: 100 }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment