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

154 lines 5.3 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 if ( $taxanomy == 'doc_category' || is_tax( 'doc_tag' ) ) {
49 if ( $enable_breadcrumb_category ) {
50 $query_obj = get_queried_object();
51 $term_id = $query_obj->term_id;
52
53 $term_parents = betterdocs()->query->get_term_parents( $term_id );
54 if ( ! is_wp_error( $term_parents ) && is_array( $term_parents ) ) {
55 $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_after_archives', array_merge( $breadcrumbs, $term_parents ) );
56 }
57 }
58 } elseif ( is_single() ) {
59 global $wp_query, $post;
60
61 if ( $enable_breadcrumb_category ) {
62 $cat_terms = [];
63 if ( isset( $wp_query->query_vars['doc_category'] ) ) {
64 $term = get_term_by( 'slug', $wp_query->query_vars['doc_category'], 'doc_category' );
65 if ( ! empty( $term ) ) {
66 $cat_terms[] = $term;
67 }
68 }
69
70 if ( empty( $cat_terms ) ) {
71 $cat_terms = wp_get_post_terms( $post->ID, 'doc_category' );
72 }
73
74 $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_before_single_category', $breadcrumbs );
75
76 if ( $cat_terms ) {
77 $term_parents = betterdocs()->query->get_term_parents( $cat_terms[0]->term_id );
78 if ( ! is_wp_error( $term_parents ) && is_array( $term_parents ) ) {
79 $breadcrumbs = array_merge( $breadcrumbs, $term_parents );
80 }
81 }
82 }
83
84 // Check if the post is in a category
85 if ( $enable_breadcrumb_title ) {
86 $breadcrumbs[] = [
87 'li_classes' => [ 'item-current', 'item-' . ( $post->ID != null ? $post->ID : '' ), 'current' ],
88 'url' => '',
89 'text' => betterdocs()->template_helper->kses( get_the_title() )
90 ];
91 }
92 }
93
94 if ( empty( $breadcrumbs ) ) {
95 return;
96 }
97
98 $_wrapper_attr_array = [
99 'class' => [ 'betterdocs-breadcrumb' ],
100 'id' => [ 'betterdocs-breadcrumb' ]
101 ];
102
103 if ( isset( $breadcrumbs_layout ) && ! empty( $breadcrumbs_layout ) ) {
104 $br_wrapper_attr_array['class'][] = 'betterdocs-breadcrumb ' . $breadcrumbs_layout;
105 $br_wrapper_attr_array['id'][] = 'betterdocs-breadcrumb';
106 } else {
107 $br_wrapper_attr_array = $_wrapper_attr_array;
108 }
109
110
111 if ( isset( $widget ) && $widget instanceof \WPDeveloper\BetterDocs\Editors\BlockEditor\Block ) {
112 $br_wrapper_attr_array['class'][] = $blockId;
113 }
114
115 $wrapper_attr = betterdocs()->template_helper->get_html_attributes( $br_wrapper_attr_array );
116 ?>
117
118 <nav
119 <?php echo $wrapper_attr; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>>
120 <ul class="betterdocs-breadcrumb-list">
121 <?php
122 foreach ( $breadcrumbs as $breadcrumb ) :
123 $li_classes = [ 'betterdocs-breadcrumb-item' ];
124 $li_classes = ! empty( $breadcrumb['li_classes'] ) ? array_merge( $li_classes, $breadcrumb['li_classes'] ) : $li_classes;
125 ?>
126 <li class="<?php echo implode( ' ', $li_classes ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>">
127 <?php
128 if ( empty( $breadcrumb['url'] ) ) {
129 echo wp_kses_post( '<span>' . $breadcrumb['text'] . '</span>' );
130 } else {
131 echo wp_kses_post(
132 wp_sprintf(
133 "<a href='%s' class='bread-link' title='%s'>%s</a>",
134 esc_attr( esc_url( $breadcrumb['url'] ) ),
135 esc_attr( stripslashes( $breadcrumb['text'] ) ),
136 $breadcrumb['text']
137 )
138 );
139 }
140 ?>
141 </li>
142 <?php
143 if ( next( $breadcrumbs ) ) :
144 if ( $breadcrumbs_layout == 'layout-2' || $breadcrumbs_layout == 'layout-3' ) {
145 $view_object->get( 'template-parts/breadcrumb-delimiter-2' );
146 } else {
147 $view_object->get( 'template-parts/breadcrumb-delimiter-1' );
148 }
149 endif;
150 ?>
151 <?php endforeach; ?>
152 </ul>
153 </nav>
154