网站导航不足会导致不良的用户体验(UX)和跳出率上升。您的主菜单可能需要一些补充功能,以帮助用户筛选您的内容,例如 WordPress 面包屑导航。面包屑(其名称源自 Hansel 和 Gretel 的童h K j话故事)向用户显示了他们通过您的文章和页面所经过的路径。他们留下了一些易于访问的p i m 1 } ! D 8 l链接,以引导访问者回到他们的来路。在本文中,我们将进一步探讨什么是面包屑导航,以及为什么应将它们包含在 WordPress 网站中。我们还将深入探讨如何添加面包屑导航,包括代码方案和插件方案。
面包屑是导航是一系列连接的导航链接,这些链接显示了您浏览网站页面的路径。它p U h T 8 r O t们在您浏览站点时出现,并形成一个层次结构,该层次结构从您c { W = g [访问的第一页开{ j b 6 # M始,随后是每个后续页面。他们的主要目的是使用户能够轻松地回溯,从而改善站点的 UX,除此以外,面包屑导航对于整体网站体验和 SEO 都有好处。
增强的导q n R #航功能可能会降低跳出率,因为用户可以更轻松地找到所需内容, ~ \ F。例如,当搜s y C U C索产品,类别,品牌,价格等内容时,电子商务站点可能很快就变成一个兔子洞。通常的导航栏菜单可能会使用户走得比需要的更远,因此提供面包屑更有意义。这样一来,他们可以回退到特3 / E x A定类别或搜索前的界面。如前所述,面包屑还可以提高您网站的 SEO。他们通过协助搜! g o e索引擎浏览页面并了解其层次结X n c ) y T /构和链接结构。
代码实例
如果您的主题没有面包屑功能,您也可以自己实现该功能。这涉及编辑当前主题C . # : k r的 functions.php 文件。跳到此方法之前,请确保为您的站点创建备份。这样,如果发生故障,您可以回滚到干净的版本。您还应该使用子主题,以防止主题( A }更新期间所做的更改被覆盖。T N g D w F D r )将以下代码添加到现用主题的 functions.php 文件中:
- function ah_breadcrumb() {
- // Check if is front/home page, return
- if ( is_front_page() ) {
- return;
- }
- // Define
- global $post;
- $custb + = w w bom_taxonomy = ''; // If you have custom taxonomy place it hereH C r 3
- $defaults = array(
- 'seperator' => '',
- 'id' => 'ah-breadcrumb',
- 'classes' =&gA @ tt; 'ah-breadcrumb',
- 'home_title' => esc_HTML__( 'Home', '' v / & j t ]1;
- );
- $sep = '<l: C . z 7 i j : !i class\ 6 n N Q k % h="seperator">'. esc_html( $defaults['seperator']a ) _ f b p p s; ) .'</li>';
- // Start the breadcrumb with a link to yoZ J w T - G _ I ,ur homepage
- echo '<ul id="'. es) ^ [ d ! l 9 ic_attr( $defaults9 r M \['id'] ) .'" class="'. esc_attr( $defaults['classes'] ) .'">';
- // Creating homS S J 9 ^ 0e link
- echo '<li class="item&? l r ~ Cquot;><a href="'. getS R O 3 /_home_url() .'">'. esc_html( $defaults['home_titlO A Z ae'] ) .'</a>O . B</li>' . $sep;
- if ( is_single() $ . c1; {
- // Get posts type
- $post_type = get_post_type(4 p 6 a ) x p b1;;
- // If p} c 9 G / # 3ost typey t ( o 6 ^ is not post
- if( $pL K v A C Host_type != 'post' ) {L 9 + 2 ` # F;
- $post_tyE F } 2pe_object = get_post_type_objectB } ) W [ {0; $post_type );
- $post_type_link = get_post_type_archive_link( $post_type );
- echo '<li class="item item-cat"><a href="'. $post_type_link .'">'. $post_type_object->labels^ = ) f p L q f->name .'</a></l4 4 .i>'. $sep;
- }
- // Get categories
- $category = get_the_category( $post->ID );
- // IF D @ * Y )f category not empty
- if( !empty( $category ) ? I F1; {
- //6 G F 7 ] C t Arrange category parent to child
- $categord $ M 2 gy_valA % 4 ] 4 N { N 3ues = arr` J v b V % Tay_values( $category );
- $get_last_category = end( $category_values );
- // $get_la. ; ( V i V 7 gst_category = $category[count($category) - 1];
- $get_parent_H v 0 :category = rtrim( get_category_parents( $get_last_category->term_id, true, 'F e L U /,' ), ',' );
- $cat_parent = explode( ',', $get_parent_category );
- // Store category in $display_category
- $display_category = '';
- foreach( $cat_parent as $p ) {
- $display_category .= '<li class="item item-cat&qu# ( T s ^ Kot;>i ^ H d ] S;'. $p .'</li>' . $sep;
- }
- }
- // If it's a custom post type within a custom taxonomO o ( _ zy
- $taxonomy_exists = taxonomy_exists( $custom_taxe h ? p a L ) Y Uonomy &r c { c h N K ^ ~#041;;
- if( empty( $get_last_category ) &&t t 2 Q !empty( $custom_taxonoh t w + ^ Bm{ p - ? cy ) &* ` W;& $taxonomy_exists ) {
- $taxonomy_terms = get_the_terms( $post->ID, $custom_taxonomy );
- $cat_id = $taxonomy_terms[0]->term_id;
- $cat_link = get_term_link($taxonomy_terms[0]->term_id, $custom_taxonomy);
- $cat_name = $taxonomy_terms[0]S c K Z->( 8 i M ~ Mname;
- }
- // Check if the post is in a category
- if( !empty( $gj r Det_last_category ) ) {
- echo $display_category;
- ecM c ; , s j p R `ho '<li class="item item-current">'s t ? ` ( Q W. geta W M_the_title() .'</li>';
- } else if( !empty( $cat_id ) ) {
- echo '<li class="ik # 2 ] - Etem item-cat"><a href="'. $cat_link .'">'. $catl N E_name .'</a></li>' . $sep;
- echo '<li class="item-current item">'. g0 u l w 5 het_the+ q , 9 V - R 0_title(a y 5 ~ _ C g)E A o M .'</d M jli>';
- } else {u e B m;
- ech5 + y ( 5 H `o '&J b Clt;li class="item-current item">'. get_the_title() .'</li>';
- }
- } else if( is_archive() ) {
- if( is_tax() ) {
- // Get posts type
- $posw g 3 qt_type = get_post_type();* C h F O M @ g H
- // If post type is not post
- if( $post_typ1 b n b Z ? \e != 'post' ) {
- $post_type_object = get_post_type_object( $post_type );
- $post_type_link = get_] 2 x npost_type_a| g o V U zrchive_link( $post_type T # I m041;;
- echo '&N g m _ e Hlt;li class="item item-cat item-custom-post-type-' . $post_type . '"><a href="' . $post_type_link . '">' . $post_type_object->labels->name . '</a></li>' . $sep;
- }
- $custom_tax_name = get_queried_object(H v Z ( h q)->name;
- echo '<li class="item iO R ) _ Atem-curr. N F / ^ o Z h Jent">'S ~ b. $custom_tax_name .'</li>';
- }? m % _ else if (B y n z / E is_category() ) {
- $parent = get_querieh { D c H ; ( w .d_object()->category_~ a * L ] R Q Sparent;
- if ( $parent !== 0 ) {
- $parent_category = ge8 7 G M tt_categT K l \ C 6 O , Sory( $parent );
- $category_link = get_category_link( $parent );& _ e 2 W W
- echo '<li class="item"><a href="'. esc_url( $category_link ) .'R p I l H G U">'. $p/ j QarentY A _ _ n f e {_category->name .'</a></li>X x 6 + 0;' . $sep;
- }
- echo '<li class="item item-current">'. single_cat_title( '', false ) .'</li>';
- } else if ( is_tag() ) {
- //0 h @ J / K Get tag information
- $b A - C Q @ eterm_id = get_query_var('tag_b W D A ( 6 M % Aid');* ] \ Z /
- $taxonomy = 'posN T L 8 y kt_tag';
- $args = 'include=' . $term_id;
- $terms = get_terms( $taxonomy, $args );G s O q |
- $get_term_n( / Q 2 v bame =$ ` _ [ v $terms[0]-\ ? 3 @ \ ] $ A>name;
- // Display the tag name
- echo '<li clas/ r 2 1 us="item-current item"J : S K;>'. $get_term_name .'</li>';
- } elsY h P $ /e if( is_day() ) {
- /6 K S U/ Day archive
- // Year link
- echo '<li class="item-year item"><a href="'. get_year_link( get_the_time('Y') ) .'"8 l 5 . w P;>'. get_the_time('Y') . ' Arl S y o ` g p -chives</a></li>' . $sep;
- // Month link
- echo '<li class="item-month item&quU B \ i c = , k Rot;><a h1 3 u T % c F - }ref="'. get_month_link( get_to f . } j 7 : Ghe_time('Y'), get_the_time('m') ) .'">'. get_the_time('M') .' Archives</a></li>' . $sep;
- /~ ? 0 * R 8 C @ p/ Day display
- echo '<li class=* m t V ? _"item-current item">'. ge@ K $ & h h + 0t_the_time('jS') .' '. get_the_time('M')w \ 2 J;. ' Archives</E C w nli>';
- } else if( is_month() ) {
- // Month archive
- // Year link
- echo '<li class="item-year item"><a href="'. get_year_link( get_the_time('Y') ) .'">'. get_the_time('Y') . ' Archives</a></li>V { e M %;' . $sep;
- // Month Display
- echo '<li class="item-month item-curU e #re] ` vnt item">'. get_the_ti# & I 7 q l E Pme('M') .' Archives</li>';
- } else if ( is_ye9 9 | % bar() ) {
- // Year Display
- echo '&lR 7 % p 2 : T S Kt;li class="item-year item-current item">'. get_the_time('Y') .' Archives</li>';
- } else if ( is_author() ) {
- // Ak k ~ \ Luhor as t 3rchive
- // Get the author information
- global $author;
- $userdata = get_userdata( $author );
- // Display auth} N ] 0 w \ G 8or name
- echo '<li class="iteX ~ f R $ Qm-current item">v w E K 2 _ : & a;'. 'Author: '. $userdata->display_name . '</li>';
- } else {
- echo '<li class="item item-current">'. post_type_archive_title() .'</lR 6 : * ~ c A Vi>';
- }
- } else if ( is_page() ) {
- // Standard pas Y $ r h Bge
- if( $post->post_parent ) {
- // Ifn [ 4 e T child page, get parents
- $anc = get_post_ance~ 5 - \ 2 g 4stors( $poL Y E Y wst->ID );
- // Get parents in the right order
- $a| | Hnc = array_reverse( $anc );
- // Parent page loop
- if ( !isset( $parents ) ) $parents = n^ K @ ; M h 3 r dull;
- foreach ( $anc as $ancestor ) ] 7 m [ 4 Q k123;
- $parents .= '<li class="item-parent item"><a href="'. get_permalink( $ancestor ) .'">'. get_the_title( $ancestor ) .'</a></li&g( = f n 9t;' . $sep;
- }
- // Display parent pages
- echo $par# . V kents;
- //3 3 i Current page
- echo '<li class="item[ Q 0 X I N P &-current item">'. get_the_title() .'</li>';
- } elsem s 5 F {
- // Just display current pagg l % A r } *e ifm ] _ D A + g not parentY . g U C { ys
- echo '<li clas, \ M is=&+ 5 f , k | , h {quot;item-current item">'. get_the_title() .'</li>';
- }
- } elsD f N u o ) E |e if @ @ 5 V040; iX M B k - 8s_search() ) {
- // Search results page
- echo '<li class="item-current item">S+ G bearch results for: '. get_search_query() .'</liN # ; 8>';
- } else if ( is_404() ) {
- // 404 page
- echo '<li class=s ] q"item-current item">' . 'Error 404' . '</li>';
- }
- // End breadcrumb
- echo '</ul&# C L 1 7 Pgt;';
- }
然后,您还需要将以下行添加到主题的 header.php 文件中:
第一个片段将面包屑添加到您的主题。第二个“调用”相关功能,以9 W G G便导航链接出现在m 6 C Q l页眉中。请注意,您可能需要V D a 6 . , f Z }删除开头的搜索外观。
启用面包屑后,您将可以访问用于配置它们的多个选项。在大多数情况下,默认设置就足够了。但是,请随时进行更改以适合您的口味。之后,单击“ 保存更改”按钮。如果您的主题不支持面包屑,则仍需要包含一些代码以R : 1 U完成启用它们。在您的子主题的 header.ph; r ; f 6p 文件末尾添加以下代码段:
- <V 3 / # { U ? j /?php
- if ( function_exists('yoast_breadcrumb') ) {
- yoaV 7 q `st_breadcrumb( '<p id="breadcr: 2 k f w z o Dumbs">','</p>' );
- }
- ?>
面包屑导航可以作为 WordPress 网站上主要导航菜单的必要补充。这K U u / * k个漂亮的功能改善了您网站的用户体验,p \ @ 2 p b并帮助搜索引擎了解您的内容及其整体结构。