Drupal - How to override page title by content type
As mentioned by Ivan Jaros You can use hook_preprocess_page_title
.
You just have to load the node from the route first, to get some context.
function yourtheme_preprocess_page_title(&$variables) {
// Load the node entity from current route
if ($node = \Drupal::routeMatch()->getParameter('node')) {
// Load the label of the bundle
$bundle_label = \Drupal::entityTypeManager()
->getStorage('node_type')
->load($node->bundle())
->label();
// Set the page title
$variables['title'] = $bundle_label;
}
}
If you just want to use this with certain content types, you can use $node->bundle()
to get the machine-readable name and check against it.
Linus got it right for the preprocess function, but I'd personally use this to get the current node (as it's shorter and seem easier...)
$node = \Drupal::request()->attributes->get('node')
Then to access the node title, use :
$title = $node->getTitle()
or to access another custom field (with a value) :
$node->get('field_MYFIELD')->value
Actually, access everything the way you'd access these datas in a regular node preprocess function :)
Use the Metatag module it is D8-ready already and supports what you need.