How to build custom breadcrumbs
You can accomplish this with hook_menu_breadcrumb_alter():

function mymodule_menu_breadcrumb_alter(&amp;$active_trail, $item) {
  $home = $active_trail[0];

  $new = array(
    'title' =&gt; t('Some title'),
    'href' =&gt; 'internal/drupal/path',
    'link_path' =&gt; '',
    'localized_options' =&gt; array(),
    'type' =&gt; 0,
  );

  $active_trail = array_merge(array($home, $new), array_slice($active_trail, 1));
}


This is a fairly simplified example that creates a new breadcrumb item, and sticks it after the first entry.  The $item parameter will be the router entry for the current page.  If you want to use that, you need to dpm() it to see what is there.  A more concrete example, which assumes that you are on a node page would be:

function mymodule_menu_breadcrumb_alter(&amp;$active_trail, $item) {
  $home = $active_trail[0];

  if (arg(0) == 'search') {
    $active_trail = array($home);
  }
  else if (isset($item['load_functions'][1]) &amp;&amp; !empty($item['map'][1]) &amp;&amp; $item['load_functions'][1] == 'node_load') {
    $node = $item['map'][1];

    $new = array(
      'title' =&gt; $node-&gt;title,
      'href' =&gt; 'node/' . $node-&gt;nid,
      'link_path' =&gt; '',
      'localized_options' =&gt; array(),
      'type' =&gt; 0,
    );

    $active_trail = array_merge(array($home, $new), array_slice($active_trail, 1));
  }
}