PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.8.2
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.8.2
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.8.2, at views/widgets/breadcrumbs.php

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