PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.5.3
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.5.3
4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.5.2 All 199 releases
betterdocs / views / widgets / breadcrumbs.php

breadcrumbs.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 4.5.3, at views/widgets/breadcrumbs.php

169 lines 5.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( is_front_page() ) {
3 return;
4 }
5 $breadcrumbs_layout = isset( $breadcrumbs_layout ) ? $breadcrumbs_layout : 'layout-1';
6 $home_text = betterdocs()->settings->get( 'breadcrumb_home_text', 'Home' );
7 $home_url = betterdocs()->settings->get( 'breadcrumb_home_url' );
8 $enable_breadcrumb_category = betterdocs()->settings->get( 'enable_breadcrumb_category' );
9 $enable_breadcrumb_title = betterdocs()->settings->get( 'enable_breadcrumb_title' );
10 $builtin_doc_page = betterdocs()->settings->get( 'builtin_doc_page', true );
11 $docs_page = betterdocs()->settings->get( 'docs_page' );
12 $taxanomy = betterdocs()->query->get_taxonomy();
13 $post_type = 'docs';
14 $docs_page_title = __( 'Docs', 'betterdocs' );
15 $li_classes = [ 'item-cat', 'item-custom-post-type-docs' ];
16 $enable_breadcrumb_home_text = betterdocs()->settings->get('enable_breadcrumb_home_text', true);
17
18 if ( $builtin_doc_page || ( ! $builtin_doc_page && $docs_page <= 0 ) ) {
19 $post_type_object = get_post_type_object( $post_type );
20 $li_classes = [ 'item-cat', 'item-custom-post-type-' . esc_attr( $post_type ) ];
21
22 $docs_page_url = get_post_type_archive_link( $post_type );
23 $docs_page_title = $post_type_object->labels->name;
24 } elseif ( $docs_page ) {
25 $li_classes = [ 'item-cat item-custom-docs-page' ];
26 $docs_page_url = get_page_link( $docs_page );
27 $docs_page_title = get_the_title( $docs_page );
28 }
29
30 $breadcrumbs = [
31 [
32 'li_classes' => [ 'item-home' ],
33 'url' => $home_url,
34 'text' => stripslashes( $home_text )
35 ],
36 [
37 'li_classes' => $li_classes,
38 'url' => $docs_page_url,
39 'text' => $docs_page_title
40 ]
41 ];
42
43 if( ! $enable_breadcrumb_home_text ) {
44 unset($breadcrumbs[0]);
45 }
46
47 $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_before_archives', $breadcrumbs );
48
49 // Detect the current archive taxonomy via the queried object (reliable in Elementor theme builder context)
50 $_queried_obj = get_queried_object();
51 $_is_doc_tag = $_queried_obj instanceof \WP_Term && $_queried_obj->taxonomy === 'doc_tag';
52
53 if ( $taxanomy == 'doc_category' ) {
54 if ( $enable_breadcrumb_category ) {
55 $query_obj = get_queried_object();
56 $term_id = $query_obj->term_id;
57
58 $term_parents = betterdocs()->query->get_term_parents( $term_id );
59 if ( ! is_wp_error( $term_parents ) && is_array( $term_parents ) ) {
60 $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_after_archives', array_merge( $breadcrumbs, $term_parents ) );
61 }
62 }
63 } elseif ( $_is_doc_tag ) {
64 // Always append the current tag name: Home > Docs > Tag Title
65 $tag_crumb = [
66 [
67 'li_classes' => [ 'item-current', 'item-tag-' . esc_attr( $_queried_obj->term_id ), 'current' ],
68 'url' => '',
69 'text' => $_queried_obj->name,
70 ],
71 ];
72 $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_after_archives', array_merge( $breadcrumbs, $tag_crumb ) );
73 } elseif ( is_single() ) {
74 global $wp_query, $post;
75
76 if ( $enable_breadcrumb_category ) {
77 $cat_terms = [];
78 if ( isset( $wp_query->query_vars['doc_category'] ) ) {
79 $term = get_term_by( 'slug', $wp_query->query_vars['doc_category'], 'doc_category' );
80 if ( ! empty( $term ) ) {
81 $cat_terms[] = $term;
82 }
83 }
84
85 if ( empty( $cat_terms ) ) {
86 $cat_terms = wp_get_post_terms( $post->ID, 'doc_category' );
87 }
88
89 $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_before_single_category', $breadcrumbs );
90
91 if ( $cat_terms ) {
92 $term_parents = betterdocs()->query->get_term_parents( $cat_terms[0]->term_id );
93 if ( ! is_wp_error( $term_parents ) && is_array( $term_parents ) ) {
94 $breadcrumbs = array_merge( $breadcrumbs, $term_parents );
95 }
96 }
97 }
98
99 // Check if the post is in a category
100 if ( $enable_breadcrumb_title ) {
101 $breadcrumbs[] = [
102 'li_classes' => [ 'item-current', 'item-' . ( $post->ID != null ? $post->ID : '' ), 'current' ],
103 'url' => '',
104 'text' => betterdocs()->template_helper->kses( get_the_title() )
105 ];
106 }
107 }
108
109 if ( empty( $breadcrumbs ) ) {
110 return;
111 }
112
113 $_wrapper_attr_array = [
114 'class' => [ 'betterdocs-breadcrumb' ],
115 'id' => [ 'betterdocs-breadcrumb' ]
116 ];
117
118 if ( isset( $breadcrumbs_layout ) && ! empty( $breadcrumbs_layout ) ) {
119 $br_wrapper_attr_array['class'][] = 'betterdocs-breadcrumb ' . $breadcrumbs_layout;
120 $br_wrapper_attr_array['id'][] = 'betterdocs-breadcrumb';
121 } else {
122 $br_wrapper_attr_array = $_wrapper_attr_array;
123 }
124
125
126 if ( isset( $widget ) && $widget instanceof \WPDeveloper\BetterDocs\Editors\BlockEditor\Block ) {
127 $br_wrapper_attr_array['class'][] = $blockId;
128 }
129
130 $wrapper_attr = betterdocs()->template_helper->get_html_attributes( $br_wrapper_attr_array );
131 ?>
132
133 <nav
134 <?php echo $wrapper_attr; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>>
135 <ul class="betterdocs-breadcrumb-list">
136 <?php
137 foreach ( $breadcrumbs as $breadcrumb ) :
138 $li_classes = [ 'betterdocs-breadcrumb-item' ];
139 $li_classes = ! empty( $breadcrumb['li_classes'] ) ? array_merge( $li_classes, $breadcrumb['li_classes'] ) : $li_classes;
140 ?>
141 <li class="<?php echo implode( ' ', $li_classes ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>">
142 <?php
143 if ( empty( $breadcrumb['url'] ) ) {
144 echo wp_kses_post( '<span>' . $breadcrumb['text'] . '</span>' );
145 } else {
146 echo wp_kses_post(
147 wp_sprintf(
148 "<a href='%s' class='bread-link' title='%s'>%s</a>",
149 esc_attr( esc_url( $breadcrumb['url'] ) ),
150 esc_attr( stripslashes( $breadcrumb['text'] ) ),
151 $breadcrumb['text']
152 )
153 );
154 }
155 ?>
156 </li>
157 <?php
158 if ( next( $breadcrumbs ) ) :
159 if ( $breadcrumbs_layout == 'layout-2' || $breadcrumbs_layout == 'layout-3' ) {
160 $view_object->get( 'template-parts/breadcrumb-delimiter-2' );
161 } else {
162 $view_object->get( 'template-parts/breadcrumb-delimiter-1' );
163 }
164 endif;
165 ?>
166 <?php endforeach; ?>
167 </ul>
168 </nav>
169