Breadcrumbs + Rich Snippets Sem Plugin

  • 5 min de leitura
Foto de Lucas Tavares
wordpress codigos e truques

Neste artigo você vai aprender a colocar Breadcrumbs (Navegação Estrutural) ou Migalha de Pão sem usar plugins. De quebra, vai inserir Rich Snippets para permitir que a estrutura de páginas a pareça também nos resultados de buscas do Google, consequentemente deixado seu site muito mais amigável nos resultados. Essa é a melhor maneira de mostrar para o usuário e o Google como é a estrutura do site.

O que é breadcrump?

Pode se dizer que o breadcrump é o "caminho" percorrido pelo usuário até uma determinada página. Ele permite que o usuário localize a página que está acessando em meio a estrutura do site. É comum ser exibido na parte superior das páginas da internet.

breadcrumbs

O que é Rich Snippets?

O Rich Snippets são dados estruturados usados geralmente para permitir que os buscadores identifiquem informações relevantes dentro de um site. Os buscadores usam essas informações para aprimorar os resultados de buscas. Neste caso, os Rich Snippets são os responsáveis por permitir que o Google interprete e exiba o Breadcrumbs nos resultados de buscas.

rich snippets

O Código

Coloque o seguinte código no arquivo functions.php do seu tema:

/**
* Retorna um Breadcrumbs da página atual
* @author Lucas Tavares <contato@wptotal.com.br>
* @global WP_Post $post
* @global int $author
* @param array $args Argumentos para personalizar o Breadcrumbs
* @return string Retorna o código HTML do Breadcrumbs
*/
function wp_custom_breadcrumbs($args = array()) {
global $post, $author;
$default = array(
'after' => '', //Valor impresso depois do breadcrumbs
'before' => '', //Valor impresso antes do breadcrumbs
'container' => 'div', //Container do breadcrumbs
'container_class' => 'breadcrumbs', //Classe do container
'container_id' => 'bcrumbs', //Id do container
'separator' => '&raquo;', //Seperador do items (páginas)
'display_404' => 'Página não encontrada', //Valor exibido para o erro 404
'display_home' => 'Home', //Valor exibido para Home Page (Página Inicial)
'display_search' => 'Resultado da busca por %1$s', //Valor exibido para o resultado de busca
'item_wrap' => '<span class="bcrumb-item" %1$s>%2$s</span>', //É o "Envelope" dos items
'rich_snippets' => true, //Ultiliza Rich Rnippets para os buscadores localizarem o breadcrumb
);
$args = array_merge($default, $args);
$args = (object) $args;
$items = array();
if (!in_array($args->container,array('div','nav','span','section')))
$args->container = 'div';
$container_before = sprintf("{$args->before}<{$args->container} %s id=\"{$args->container_id}\" "
. "class=\"{$args->container_class}\">", !$args->rich_snippets ? '' : 'xmlns:v="http://rdf.data-vocabulary.org/#"');
$container_after = "</{$args->container}>{$args->after}";
if ($args->display_home && (is_paged() || (!is_home() && !is_front_page())))
$items[] = array($args->display_home, get_home_url());
if (is_paged()) {
$items[] = array('Página '.get_query_var( 'paged' ));
}
else if (is_home() || is_front_page()) {
if ($args->display_home)
$items[] = array($args->display_home);
}
else if (is_search()) {
if ($args->display_search) {
$display = vsprintf($args->display_search, get_search_query());
$items[] = array($display);
}
}
else if (is_404()) {
if ($args->display_404)
$items[] = array($args->display_404);
}
else if (is_tag()) {
$items[] = array('Tag '.single_tag_title( '', false ));
}
elseif ( is_post_type_archive() ) {
$items[] = array(post_type_archive_title( '', false ));
}
else if (is_author()) {
$userdata = get_userdata($author);
$items[] = array('Postado por '.$userdata->display_name);
}
else if (is_category()) {
$cat = get_the_category();
$cats_ancestors = get_ancestors( $cat[0]->cat_ID, 'category' );
$cats_ancestors = array_reverse($cats_ancestors);
foreach ($cats_ancestors as $ancest_id) {
$parent = get_category($ancest_id, false);
$items[] = array($parent->name, get_category_link($parent));
}
$items[] = array($cat[0]->name);
}
else if (is_year()) {
$items[] = array(get_the_time( 'Y' ));
}
else if (is_month()) {
$items[] = array(get_the_time( 'Y' ), is_year() ? '' : get_year_link(get_the_time( 'Y' )));
$items[] = array(get_the_time( 'F' ));
}
else if (is_day()) {
$items[] = array(get_the_time( 'Y' ), get_year_link(get_the_time( 'Y' )));
$items[] = array(get_the_time( 'F' ), get_month_link(get_the_time( 'Y' ), get_the_time( 'm' )));
$items[] = array(get_the_time( 'd' ));
}
else if (is_single() || is_page()|| is_attachment()) {
$ancestors = get_post_ancestors($post->ID);
$cat = get_the_category((is_attachment() && !empty($ancestors)) ? $ancestors[0] : $post->category_id);
if (!empty($cat))
$items[] = array($cat[0]->name, get_category_link($cat[0]));
if (!empty($ancestors)) {
$ancestors = array_reverse($ancestors);
foreach ($ancestors as $post_id) {
$items[] = array(get_the_title($post_id), get_permalink($post_id));
}
}
$items[] = array($post->post_title);
}
if (empty($items)) //Não faz sentido mostrar apenas 1 item...
return '';
$items_output = array();
foreach ($items as $item) {
if (empty($item[0]))
continue;
if (isset($item[1])) { //Possui link?
$display = sprintf('<a href="%1$s" %2$s>%3$s</a>',$item[1], !$args->rich_snippets ? '' : 'rel="v:url" property="v:title"', $item[0]);
$item_html = sprintf($args->item_wrap, !$args->rich_snippets ? '' : 'typeof="v:Breadcrumb"', $display);
} else {
$item_html = sprintf($args->item_wrap, !$args->rich_snippets ? '' : 'typeof="v:Breadcrumb" property="v:title"', $item[0]);
}
$items_output[] = $item_html;
}
return $container_before.
implode('<span class="bcrumb-separator">'.$args->separator.'</span>', $items_output)
.$container_after;
}

Como Usar o Código

O código abaixo deve colocado onde deseja que a migalha de pão seja exibida no tema.

// Mostra o breadcrumbs com rich snippets
echo wp_custom_breadcrumbs();
// Mostra o breadcrumbs sem rich snippets
echo wp_custom_breadcrumbs( array('rich_snippets' => false) );
//Alterando o texto mostrado para página inicial e 404.
$args = array(
'display_home'=>'Página Inicial',
'display_404'=>'Erro 404',
);
echo wp_custom_breadcrumbs( $args );

Esse código eu utilizo em sites de vários clientes. Caso encontre algum problema, é só informar nos comentários.

5 Comentários para “Breadcrumbs + Rich Snippets Sem Plugin
  1. desculpa, mais qual dos código é para usar o de cima ou de baixo?

    eu ainda estou aprendendo deste já obrigada!

    1. Gravatar
      Autor do site

      Olá Patricia,

      Na verdade, é para usar os dois códigos. Um é o método em si, e o outro é um exemplo de como chamá-lo (no artigo explica o que é para fazer com cada um).

      Espero ter ajudado.

  2. $container_after = "container}>{$args->after}";

    $container_after = "container}>{$args->after}";

    1. Gravatar
      Autor do site

      Obrigado Rhuan,

      Parece que houve algum problema na hora de colocar ele aqui no artigo, mas agora já esta ok.

  3. Ótimas dicas, os Breadcrumbs são muito importantes para quem usa SEO, pois ajuda e muito na verificação estruturada que os buscadores fazem no site.