WordPress: creare un menu breadcrumb
Implementare un menu breadcrumb in WordPress senza plugin.
Possiamo creare un menu breadcrumb in WordPress senza l’ausilio di plugin ma ricorrendo semplicemente ad una funzione che mostra la gerarchia delle pagine e delle sezioni del nostro sito in modo semplice ma efficace. La funzione può essere quindi inserita nel nostro tema nel punto in cui vogliamo che appaia il menu breadcrumb. Vediamone insieme i dettagli.
La funzione è la seguente:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
function create_breadcrumbs() {
$delimiter = '/';
$home = 'Home';
$before = '<span class="current">';
$after = '</span>';
if ( !is_home() && !is_front_page() || is_paged() ) {
echo '<div id="breadcrumbs">';
global $post;
$homeLink = get_bloginfo('url');
echo '<a href="' . $homeLink . '">' . $home . '</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 $before . single_cat_title('', false) . $after;
} 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 $before . get_the_time('d') . $after;
} elseif ( is_month() ) {
echo '<a href="' . get_year_link(get_the_time('Y')) . '">' . get_the_time('Y') . '</a> ' . $delimiter . ' ';
echo $before . get_the_time('F') . $after;
} elseif ( is_year() ) {
echo $before . get_the_time('Y') . $after;
} elseif ( is_single() && !is_attachment() ) {
if ( get_post_type() != 'post' ) {
$post_type = get_post_type_object(get_post_type());
$slug = $post_type->rewrite;
echo '<a href="' . $homeLink . '/' . $slug['slug'] . '/">' . $post_type->labels->singular_name . '</a> ' . $delimiter . ' ';
echo $before . get_the_title() . $after;
} else {
$cat = get_the_category(); $cat = $cat[0];
echo get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');
echo $before . get_the_title() . $after;
}
} elseif ( !is_single() && !is_page() && get_post_type() != 'post' && !is_404() ) {
$post_type = get_post_type_object(get_post_type());
echo $before . $post_type->labels->singular_name . $after;
} elseif ( is_attachment() ) {
$parent = get_post($post->post_parent);
$cat = get_the_category($parent->ID); $cat = $cat[0];
echo get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');
echo '<a href="' . get_permalink($parent) . '">' . $parent->post_title . '</a> ' . $delimiter . ' ';
echo $before . get_the_title() . $after;
} elseif ( is_page() && !$post->post_parent ) {
echo $before . get_the_title() . $after;
} 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 $before . get_the_title() . $after;
} elseif ( is_search() ) {
echo $before . get_search_query() . $after;
} elseif ( is_tag() ) {
echo $before . single_tag_title('', false) . $after;
} elseif ( is_author() ) {
global $author;
$userdata = get_userdata($author);
echo $before . $userdata->display_name . $after;
} elseif ( is_404() ) {
echo $before . 'Errore 404' . $after;
}
if ( get_query_var('paged') ) {
if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ' (';
echo __('Pagina') . ' ' . get_query_var('paged');
if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ')';
}
echo '</div>';
}
} |
Possiamo richiamare la funzione in questo modo:
|
1 |
<?php create_breadcrumbs(); ?> |
I parametri modificabili sono:
$delimiter: il carattere separatore delle voci. Se usate un carattere speciale HTML dovete usare l’entità corrispondente (per esempio&:raquo;)$home: il testo della voce della homepage$before,$after: i tag di apertura e di chiusura dell’elemento HTML che marca la voce corrente.
6 commenti
Consigli di richiamare la funzione nel single.php o in qualche altro punto?
l’ho messo in loop-single.php al posto dell’argomento precedente e successivo (che tanto sono già in basso)
Non converrebbe anche specificare il tag rel nofollow ?
Certo.
ho messo il rel nofollow in ogni punto in cui compare la fine del tag a, però questo infuenza solo il link home, non riesco a farlo comparire nel link alla categoria
Comunque il mio breadcrumb che uso non ha il nofollow e non ci sono problemi a livello SEO. Penso che i duplicati vengano ignorati. ;-)
I commenti sono chiusi.