Breadcrumb com menu

Já tinha colocado em um outro post, Como fazer um Breadcrumb. Outro dias me deparei com outro problema. Como colocar o breadcrumb contendo links externos, pages e categories?

Converter todas as letra em minúsculas (Ok, eu sei que existe o strtolower e que ele já faz esse papel, mas vamos evitar de dar cáca)

<?php
	function todas_minusculas($palavra){
		$minuscula_acentuado = array('â','ã','á','à','ê','é','è','í','ì','ô','õ','ó','ò','ú','ù','û','ç');
		$maiusucla_acentuado = array('Â','Ã','Á','À','Ê','É','È','Í','Ì','Ô','Õ','Ó','Ò','Ú','Ù','Û','Ç');
		$maiuscula = array('Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M');
		$minuscula = array('q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m');

		$resultado = str_replace($maiusucla_acentuado,$minuscula_acentuado,$palavra);
		$resultado = str_replace($maiuscula,$minuscula,$resultado);
		return $resultado;
	}
?>

A função do breadcrumb:

<?php
	function breadcrumb(){
		$locations 	= get_nav_menu_locations();
		$menu 		= wp_get_nav_menu_object( $locations[ 'primary' ] );
		$menu_items = wp_get_nav_menu_items($menu->term_id);
		
		$cont2 = $cont3 = $cont4 = 0;
		foreach ( (array) $menu_items as $key => $menu_item ) {
			if($menu_item->menu_item_parent == 0){
				$menu2['ID'][$cont2]	= $menu_item->ID;
				$menu2['title'][$cont2] = $menu_item->title;
				$menu2['url'][$cont2]	= $menu_item->url;
				$cont2++;
			}else{
				if(array_search((int)$menu_item->menu_item_parent, $menu2['ID']) !== FALSE){		
					$menu3['id_pai'][$cont3]	= $menu_item->ID;
					$menu3['title_pai'][$cont3]	= $menu_item->title;
					$menu3['url_pai'][$cont3]	= $menu_item->url;
					$menu3['id_avo'][$cont3] 	= $menu2['ID'][array_search($menu_item->menu_item_parent, $menu2['ID'])];
					$menu3['title_avo'][$cont3] = $menu2['title'][array_search($menu_item->menu_item_parent, $menu2['ID'])];
					$menu3['url_avo'][$cont3] 	= $menu2['url'][array_search($menu_item->menu_item_parent, $menu2['ID'])];
					$cont3++;
				}else{
					if(array_search((int)$menu_item->menu_item_parent, $menu3['id_pai']) !== FALSE){		
						$menu4['id_filho'][$cont4]		= $menu_item->ID;					
						$menu4['title_filho'][$cont4]	= $menu_item->title;
						$menu4['url_filho'][$cont4]		= $menu_item->url;		
						$menu4['id_pai'][$cont4]		= $menu3['id_pai'][array_search($menu_item->menu_item_parent, $menu3['id_pai'])];	
						$menu4['title_pai'][$cont4]		= $menu3['title_pai'][array_search($menu_item->menu_item_parent, $menu3['id_pai'])];	
						$menu4['url_pai'][$cont4]		= $menu3['url_pai'][array_search($menu_item->menu_item_parent, $menu3['id_pai'])];	
						$menu4['id_avo'][$cont4]		= $menu3['id_avo'][array_search($menu_item->menu_item_parent, $menu3['id_pai'])];	
						$menu4['title_avo'][$cont4]		= $menu3['title_avo'][array_search($menu_item->menu_item_parent, $menu3['id_pai'])];	
						$menu4['url_avo'][$cont4]		= $menu3['url_avo'][array_search($menu_item->menu_item_parent, $menu3['id_pai'])];	
						$cont4++;						
					}
				}
			}
		}	
		
		# title_avó >> title_pai >> title_filho
		
		$title = str_replace("-"," ",get_query_var('pagename'));
		if(empty($title)){
			$title = single_cat_title(',',false);
			if(empty($title)){
				$title = get_the_title();
			}
		}
		
		foreach($menu3['title_pai'] as $indice => $m){
			echo todas_minusculas(trim($m)).' - '.todas_minusculas($title)."<br/>";
			if(todas_minusculas(trim($m)) == todas_minusculas($title)){
				echo 1;
				$title_pai 	= $menu3['title_pai'][$indice];
				$url_pai	= $menu3['url_pai'][$indice];	
				$title_avo 	= $menu3['title_avo'][$indice];
				$url_avo	= $menu3['url_avo'][$indice];	
				$title_filho = "";
				break;
			}
		}
		
		foreach($menu4['title_filho'] as $indice2 => $m2){
			if(todas_minusculas(trim($m2)) == $title){
				$title_filho 	= $menu4['title_filho'][$indice2];
				$title_pai 	= $menu4['title_pai'][$indice2];
				$url_pai	 	= $menu4['url_pai'][$indice2];	
				$title_avo 	= $menu4['title_avo'][$indice2];
				$url_avo	 	= $menu4['url_avo'][$indice2];		
				break;
			}
		}
	?>
		<ul class="breadcrumb">
			<li><a href="<?php bloginfo("template_url");?>" class="ico-home">Inicial</a></li>
		<?php	
			if(!empty($title_avo)){	
				echo '<li><a href="'.$url_avo.'" title="'.$title_avo.'">'.$title_avo.'</a></li>';
			}
			if(!empty($title_pai) and empty($title_filho)){
				echo '<li>'.$title_pai.'</li>';
			}		
			if(!empty($title_pai) and !empty($title_filho)){
				echo '<li><a href="'.$url_pai.'" title="'.$title_pai.'">'.$title_pai.'</a></li>';
				echo '<li><a href="'.$url_filho.'" title="'.$title_filho.'">'.$title_filho.'</a></li>';
			}		
		?>
		</ul>
		<?php
	}
?>

Ambas as funções eu coloquei no functions.php

Outra forma de colocar o menu com todas as “firulinhas” do design

<nav class="menu-principal">
	<nav class="menu">			
		<ul>
		<?php
			$locations = get_nav_menu_locations();
			$menu = wp_get_nav_menu_object( $locations[ 'primary'] );
			$menu_items = wp_get_nav_menu_items($menu->term_id);

			foreach ( (array) $menu_items as $key => $menu_item) {		
				$class = '';									
		?>
				<li><a href="<?php echo $menu_item->url;?>" class="<?echo $menu_item->classes[0];?>"><?php echo $menu_item->title;?></a></li>
		<?php
			}
		?>
		</ul>
	</nav>
</nav>

Como eu coloco um menu no meu WordPress?

Para colocar um menu no seu wordpress é necessário dois passos:
1 – Registrar o menu, isto é, dizer para o admin que existe um menu.

<?php
	register_nav_menu($slug, $nome);
	
	//Exemplo de variáveis
	$slug = 'primary'
	$nome = 'Menu Principal'
?>

Essa linha deve estar no functions.php

2 – Depois de registrado o menu, o mesmo deve ser impresso:

<?php
	wp_nav_menu($args);
	$args = array(	'menu' => 'primary', //Pode ser id ou slug ou nome do menu
					'echo' => true //Indica se vai precisar de echo ou não.
				 );
?> 

Existem outras variáveis para o $args. Maiores informações, clique aqui.

Pronto, agora você já tem um menu.