!
也想出现在这里? 联系我们
广告位

代码添加 WordPress 面包屑导航功能

网站导航不足会导致不良的用户体验(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 文件中:

  1. function ah_breadcrumb() {
  2. // Check if is front/home page, return
  3. if ( is_front_page() ) {
  4. return;
  5. }
  6. // Define
  7. global $post;
  8. $custb + = w w bom_taxonomy = ''; // If you have custom taxonomy place it hereH C r 3
  9. $defaults = array(
  10. 'seperator' => '',
  11. 'id' => 'ah-breadcrumb',
  12. 'classes' =&gA @ tt; 'ah-breadcrumb',
  13. 'home_title' => esc_HTML__( 'Home', '' v / & j t ]1;
  14. );
  15. $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>';
  16. // Start the breadcrumb with a link to yoZ J w T - G _ I ,ur homepage
  17. echo '<ul id="'. es) ^ [ d ! l 9 ic_attr( $defaults9 r M \['id'] ) .'" class="'. esc_attr( $defaults['classes'] ) .'">';
  18. // Creating homS S J 9 ^ 0e link
  19. 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;
  20. if ( is_single() $ . c1; {
  21. // Get posts type
  22. $post_type = get_post_type(4 p 6 a ) x p b1;;
  23. // If p} c 9 G / # 3ost typey t ( o 6 ^ is not post
  24. if( $pL K v A C Host_type != 'post' ) {L 9 + 2 ` # F;
  25. $post_tyE F } 2pe_object = get_post_type_objectB } ) W [ {0; $post_type );
  26. $post_type_link = get_post_type_archive_link( $post_type );
  27. 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;
  28. }
  29. // Get categories
  30. $category = get_the_category( $post->ID );
  31. // IF D @ * Y )f category not empty
  32. if( !empty( $category ) ? I F1; {
  33. //6 G F 7 ] C t Arrange category parent to child
  34. $categord $ M 2 gy_valA % 4 ] 4 N { N 3ues = arr` J v b V % Tay_values( $category );
  35. $get_last_category = end( $category_values );
  36. // $get_la. ; ( V i V 7 gst_category = $category[count($category) - 1];
  37. $get_parent_H v 0 :category = rtrim( get_category_parents( $get_last_category->term_id, true, 'F e L U /,' ), ',' );
  38. $cat_parent = explode( ',', $get_parent_category );
  39. // Store category in $display_category
  40. $display_category = '';
  41. foreach( $cat_parent as $p ) {
  42. $display_category .= '<li class="item item-cat&qu# ( T s ^ Kot;&gti ^ H d ] S;'. $p .'</li>' . $sep;
  43. }
  44. }
  45. // If it's a custom post type within a custom taxonomO o ( _ zy
  46. $taxonomy_exists = taxonomy_exists( $custom_taxe h ? p a L ) Y Uonomy &r c { c h N K ^ ~#041;;
  47. if( empty( $get_last_category ) &&t t 2 Q !empty( $custom_taxonoh t w + ^ Bm{ p - ? cy ) &amp* ` W;& $taxonomy_exists ) {
  48. $taxonomy_terms = get_the_terms( $post->ID, $custom_taxonomy );
  49. $cat_id = $taxonomy_terms[0]->term_id;
  50. $cat_link = get_term_link($taxonomy_terms[0]->term_id, $custom_taxonomy);
  51. $cat_name = $taxonomy_terms[0]S c K Z->( 8 i M ~ Mname;
  52. }
  53. // Check if the post is in a category
  54. if( !empty( $gj r Det_last_category ) ) {
  55. echo $display_category;
  56. ecM c ; , s j p R `ho '<li class="item item-current">'s t ? ` ( Q W. geta W M_the_title() .'</li>';
  57. } else if( !empty( $cat_id ) ) {
  58. echo '<li class="ik # 2 ] - Etem item-cat"><a href="'. $cat_link .'">'. $catl N E_name .'</a></li>' . $sep;
  59. 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>';
  60. } else {u e B m;
  61. ech5 + y ( 5 H `o '&J b Clt;li class="item-current item">'. get_the_title() .'</li>';
  62. }
  63. } else if( is_archive() ) {
  64. if( is_tax() ) {
  65. // Get posts type
  66. $posw g 3 qt_type = get_post_type();* C h F O M @ g H
  67. // If post type is not post
  68. if( $post_typ1 b n b Z ? \e != 'post' ) {
  69. $post_type_object = get_post_type_object( $post_type );
  70. $post_type_link = get_] 2 x npost_type_a| g o V U zrchive_link( $post_type T # I m041;;
  71. 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;
  72. }
  73. $custom_tax_name = get_queried_object(H v Z ( h q)->name;
  74. echo '<li class="item iO R ) _ Atem-curr. N F / ^ o Z h Jent">'S ~ b. $custom_tax_name .'</li>';
  75. }? m % _ else if (B y n z / E is_category() ) {
  76. $parent = get_querieh { D c H ; ( w .d_object()->category_~ a * L ] R Q Sparent;
  77. if ( $parent !== 0 ) {
  78. $parent_category = ge8 7 G M tt_categT K l \ C 6 O , Sory( $parent );
  79. $category_link = get_category_link( $parent );& _ e 2 W W
  80. 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&gtX x 6 + 0;' . $sep;
  81. }
  82. echo '<li class="item item-current">'. single_cat_title( '', false ) .'</li>';
  83. } else if ( is_tag() ) {
  84. //0 h @ J / K Get tag information
  85. $b A - C Q @ eterm_id = get_query_var('tag_b W D A ( 6 M % Aid');* ] \ Z /
  86. $taxonomy = 'posN T L 8 y kt_tag';
  87. $args = 'include=' . $term_id;
  88. $terms = get_terms( $taxonomy, $args );G s O q |
  89. $get_term_n( / Q 2 v bame =$ ` _ [ v $terms[0]-\ ? 3 @ \ ] $ A>name;
  90. // Display the tag name
  91. echo '<li clas/ r 2 1 us="item-current item&quotJ : S K;>'. $get_term_name .'</li>';
  92. } elsY h P $ /e if( is_day() ) {
  93. /6 K S U/ Day archive
  94. // Year link
  95. echo '<li class="item-year item"><a href="'. get_year_link( get_the_time('Y') ) .'&quot8 l 5 . w P;>'. get_the_time('Y') . ' Arl S y o ` g p -chives</a></li>' . $sep;
  96. // Month link
  97. 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;
  98. /~ ? 0 * R 8 C @ p/ Day display
  99. 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>';
  100. } else if( is_month() ) {
  101. // Month archive
  102. // Year link
  103. echo '<li class="item-year item"><a href="'. get_year_link( get_the_time('Y') ) .'">'. get_the_time('Y') . ' Archives</a></li&gtV { e M %;' . $sep;
  104. // Month Display
  105. echo '<li class="item-month item-curU e #re] ` vnt item">'. get_the_ti# & I 7 q l E Pme('M') .' Archives</li>';
  106. } else if ( is_ye9 9 | % bar() ) {
  107. // Year Display
  108. echo '&lR 7 % p 2 : T S Kt;li class="item-year item-current item">'. get_the_time('Y') .' Archives</li>';
  109. } else if ( is_author() ) {
  110. // Ak k ~ \ Luhor as t 3rchive
  111. // Get the author information
  112. global $author;
  113. $userdata = get_userdata( $author );
  114. // Display auth} N ] 0 w \ G 8or name
  115. echo '<li class="iteX ~ f R $ Qm-current item"&gtv w E K 2 _ : & a;'. 'Author: '. $userdata->display_name . '</li>';
  116. } else {
  117. echo '<li class="item item-current">'. post_type_archive_title() .'</lR 6 : * ~ c A Vi>';
  118. }
  119. } else if ( is_page() ) {
  120. // Standard pas Y $ r h Bge
  121. if( $post->post_parent ) {
  122. // Ifn [ 4 e T child page, get parents
  123. $anc = get_post_ance~ 5 - \ 2 g 4stors( $poL Y E Y wst->ID );
  124. // Get parents in the right order
  125. $a| | Hnc = array_reverse( $anc );
  126. // Parent page loop
  127. if ( !isset( $parents ) ) $parents = n^ K @ ; M h 3 r dull;
  128. foreach ( $anc as $ancestor ) ] 7 m [ 4 Q k123;
  129. $parents .= '<li class="item-parent item"><a href="'. get_permalink( $ancestor ) .'">'. get_the_title( $ancestor ) .'</a></li&g( = f n 9t;' . $sep;
  130. }
  131. // Display parent pages
  132. echo $par# . V kents;
  133. //3 3 i Current page
  134. echo '<li class="item[ Q 0 X I N P &-current item">'. get_the_title() .'</li>';
  135. } elsem s 5 F {
  136. // Just display current pagg l % A r } *e ifm ] _ D A + g not parentY . g U C { ys
  137. echo '<li clas, \ M is=&+ 5 f , k | , h {quot;item-current item">'. get_the_title() .'</li>';
  138. }
  139. } elsD f N u o ) E |e if @ @ 5 V040; iX M B k - 8s_search() ) {
  140. // Search results page
  141. echo '<li class="item-current item">S+ G bearch results for: '. get_search_query() .'</liN # ; 8>';
  142. } else if ( is_404() ) {
  143. // 404 page
  144. echo '<li class=s ] q"item-current item">' . 'Error 404' . '</li>';
  145. }
  146. // End breadcrumb
  147. echo '</ul&# C L 1 7 Pgt;';
  148. }

然后,您还需要将以下行添加到主题的 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 文件末尾添加以下代码段:

  1. <V 3 / # { U ? j /?php
  2. if ( function_exists('yoast_breadcrumb') ) {
  3. yoaV 7 q `st_breadcrumb( '<p id="breadcr: 2 k f w z o Dumbs">','</p>' );
  4. }
  5. ?>

面包屑导航可以作为 WordPress 网站上主要导航菜单的必要补充。这K U u / * k个漂亮的功能改善了您网站的用户体验,p \ @ 2 p b并帮助搜索引擎了解您的内容及其整体结构。

给TA打赏
共{{data.count}}人
人已打赏
WordPress教程

WP Dark Mode 可切换暗模式的WordPress插件

2022-9-22 15:51:38

WordPress教程

WordPress前端后台添加文章浏览次数

2022-9-24 3:48:38

下载说明

  • 1、微码盒所提供的压缩包若无特别说明,解压密码均为weimahe.com
  • 2、下载后文件若为压缩包格式,请安装7Z软件或者其它压缩软件进行解压;
  • 3、文件比较大的时候,建议使用下载工具进行下载,浏览器下载有时候会自动中断,导致下载错误;
  • 4、资源可能会由于内容问题被和谐,导致下载链接不可用,遇到此问题,请到文章页面进行反馈,以便微码盒及时进行更新;
  • 5、其他下载问题请自行搜索教程,这里不一一讲解。

站长声明

本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费资源,请在下载后24小时之内自觉删除;若作商业用途,请到原网站购买;由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系本站删除,我们将及时处理!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索