Recently I was working in a project where we needed to show page title in format of [ node count associated with taxonomy term] [taxonomy term page is associated with] | [site name]. By default drupal 7 provides page title “term name | site name” for term pages. Our requirement was to get page title 125 vegetable recipe blog | my site name. Here 125 is node count of vegetable recipe tag. This is how we have achieved this using hook_preprocess_html().
Let’s create module called custom_title & create function custom_title_preprocess_html as follows in custom_title.module file.
/**
* Implements hook_preprocess_html().
*/
function custom_title_preprocess_html(&$variables) {
// Make sure current page is taxonomy/term/tid
// In case if you use alias then you can use these way
// Let’s say your term page is vegetables/tomato then use like
// if( arg(0) = 'vegetables' && count(arg()) == 2 ){
// and alternatively change loading term from name to tid
if (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))) {
//loading term by tid
$term = taxonomy_term_load(arg(2));
//get node count by replacing token value
$term_node_count = token_replace('[term:node-count]', array('term' => $term));
//get site name
$site_name = token_replace('[site:name]');
$head_title = $term_node_count . " " . $term->name." blogs | " . $site_name;
//add title
$variables['head_title'] = $head_title;
}
}
Now just enable this module and clear your Drupal cache. You should see your page title like “ 125 vegetable blogs | site name ”.
Similar to above example you can change page title like “Page Title | Krishna blog” using hook_preprocess_html(). In this case Krishna is node author. Custom or dynamic page title for node pages:
/**
* Implements hook_preprocess_html().
*/
function custom_title_preprocess_html(&$variables) {
// Make sure current page is node/nid
// It will even if use aliases.
if(arg(0) == 'node' && is_numeric(arg(1)) && count(arg()) ==2){
//load node from nid
$node = node_load(arg(1));
//load user from uid
$user = user_load($node->uid);
//add title
$head_title = $node->title . " | " . $user->name . " blog";
$variables['head_title'] = $head_title;
}
}
The way we have customized node page title & term page titles, similarly we can use hook_preprocess_html() hook to customize other page titles like user pages, search page titles or any custom pages.