SummArg | Cursos y recursos para webmasters

11/11/2011

Crear breadcrumbs en WordPress sin plugin

Tiempo atrás les mostramos las formas de colocar breadcrumbs en un theme WordPress utilizando plugins o bien ediciones a la plantilla. Lo cierto es que, salvo que nuestras necesidades indiquen lo contrario, siempre se recomienda minimizar el uso de plugins al mínimo posible. Esto no significa sacrificar funcionalidades, sino que cuando sea posible debemos insertar las funciones en el theme minimizando la carga de otros archivos.

En esta oportunidad veremos como formar un breadcrumb con el siguiente formato:

Home » Parent Page » Sub Page1 » Sub Page2

Home » Category » Subcategory » Post Name

El estilo deberán añadirlo ustedes desde la plantilla de estilos general del theme utilizando #crumbs y #crumbs.current. En el archivo functions.php se coloca el siguiente código:

<?php function wordpress_breadcrumbs() {
  $delimiter = '»';  $name = 'Home'; //text for the 'Home' link  $currentBefore = '<span class="current">';  $currentAfter = '</span>';
  if ( !is_home() && !is_front_page() || is_paged() ) {
    echo '<div id="crumbs">';
    global $post;    $home = get_bloginfo('url');    echo '<a href="' . $home . '">' . $name . '</a> ' . $delimiter . ' ';
    if ( is_category() ) {      global $wp_query;      $cat_obj = $wp_query->get_queried_object();      $thisCat = $cat_obj->term_id;      $thisCat = get_category($thisCat);      $parentCat = get_category($thisCat->parent);      if ($thisCat->parent != 0) echo(get_category_parents($parentCat, TRUE, ' ' . $delimiter . ' '));      echo $currentBefore . 'Archive by category '';      single_cat_title();      echo ''' . $currentAfter;
    } elseif ( is_day() ) {      echo '<a href="' . get_year_link(get_the_time('Y')) . '">' . get_the_time('Y') . '</a> ' . $delimiter . ' ';      echo '<a href="' . get_month_link(get_the_time('Y'),get_the_time('m')) . '">' . get_the_time('F') . '</a> ' . $delimiter . ' ';      echo $currentBefore . get_the_time('d') . $currentAfter;
    } elseif ( is_month() ) {      echo '<a href="' . get_year_link(get_the_time('Y')) . '">' . get_the_time('Y') . '</a> ' . $delimiter . ' ';      echo $currentBefore . get_the_time('F') . $currentAfter;
    } elseif ( is_year() ) {      echo $currentBefore . get_the_time('Y') . $currentAfter;
    } elseif ( is_single() ) {      $cat = get_the_category(); $cat = $cat[0];      echo get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');      echo $currentBefore;      the_title();      echo $currentAfter;
    } elseif ( is_page() && !$post->post_parent ) {      echo $currentBefore;      the_title();      echo $currentAfter;
    } elseif ( is_page() && $post->post_parent ) {      $parent_id  = $post->post_parent;      $breadcrumbs = array();      while ($parent_id) {        $page = get_page($parent_id);        $breadcrumbs[] = '<a href="' . get_permalink($page->ID) . '">' . get_the_title($page->ID) . '</a>';        $parent_id  = $page->post_parent;      }      $breadcrumbs = array_reverse($breadcrumbs);      foreach ($breadcrumbs as $crumb) echo $crumb . ' ' . $delimiter . ' ';      echo $currentBefore;      the_title();      echo $currentAfter;
    } elseif ( is_search() ) {      echo $currentBefore . 'Search results for '' . get_search_query() . ''' . $currentAfter;
    } elseif ( is_tag() ) {      echo $currentBefore . 'Posts tagged '';      single_tag_title();      echo ''' . $currentAfter;
    } elseif ( is_author() ) {       global $author;      $userdata = get_userdata($author);      echo $currentBefore . 'Articles posted by ' . $userdata->display_name . $currentAfter;
    } elseif ( is_404() ) {      echo $currentBefore . 'Error 404' . $currentAfter;    }
    if ( get_query_var('paged') ) {      if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ' (';      echo __('Page') . ' ' . get_query_var('paged');      if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ')';    }
    echo '</div>';
  }}?>

En header.php o en la plantilla que crean conveniente, llaman a la función de la siguiente manera:

<?php if (function_exists('wordpress_breadcrumbs')) wordpress_breadcrumbs(); ?>

Visto en WavesDream

Dejar un comentario

  1. […] summarg.com […]

Dejar un comentario