custom programming
Blog

How to get dynamic or Custom page titles in Drupal 7

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.

Download the Drupal Guide
Enter your email address to receive the guide.
get in touch