Here’s a quick and dirty function for generating breadcrumbs based on pages in a WordPress menu. Please note that I have not tested this with menu items based on post types other than pages.
function jki_get_nav_menu_id_for_post($post_id)
{
$items = wp_get_nav_menu_items('Huvudmeny');
$menu_item_id = -1;
// Find menu item
foreach ((array)$items as $menu_item) {
if($menu_item->object_id == $post_id) {
$menu_item_id = $menu_item->ID;
break;
}
}
return $menu_item_id;
}
function jki_get_nav_menu_item($item_id)
{
$args = array( 'post_type' => 'nav_menu_item',
'post_status' => 'publish',
'output' => ARRAY_A,
'p' => $item_id);
$query = new WP_Query($args);
$items = $query->get_posts();
$items = array_map( 'wp_setup_nav_menu_item', $items );
if(count($items) > 0) {
return $items[0];
}
else {
return null;
}
}
function jki_wp_menu_breadcrumbs()
{
global $post;
$menu_item_id = jki_get_nav_menu_id_for_post($post->ID);
if($menu_item_id == -1) return;
$current_menu_item = jki_get_nav_menu_item($menu_item_id);
if($current_menu_item == null) return;
$delimiter = '<span> // </span>';
$crumbs = array();
$crumbs[] = $delimiter . $current_menu_item->title;
if($current_menu_item->menu_item_parent != 0) {
$is_top = false;
while($is_top == false) {
$current_menu_item = jki_get_nav_menu_item($current_menu_item->menu_item_parent);
$crumbs[] = $delimiter . '<a href="' . $current_menu_item->url . '">' . $current_menu_item->title . '</a>';
if($current_menu_item->menu_item_parent == 0) {
$is_top = true;
}
}
}
$crumbs = array_reverse($crumbs);
echo "<div id=\"breadcrumbs\">\n";
echo '<a href="/">Home</a>';
foreach ($crumbs as $crumb) {
echo $crumb;
}
echo "\n</div>\n";
}