PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 3.5.3
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v3.5.3
4.9.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 All 200 releases
← All changes | views/widgets/breadcrumbs.php +121 -153 4.9.23.5.3 View file →
@@ -1,173 +1,141 @@
1 1 <?php
2 -// phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound -- view template receives variables via extract(); prefixing is impractical.
2 + if ( is_front_page() ) {
3 + return;
4 + }
3 5
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);
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'];
22 16
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 ) ];
17 + if ( $builtin_doc_page || ( ! $builtin_doc_page && $docs_page <= 0 ) ) {
18 + $post_type_object = get_post_type_object( $post_type );
19 + $li_classes = ['item-cat', 'item-custom-post-type-' . esc_attr( $post_type )];
26 20
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 -}
21 + $docs_page_url = get_post_type_archive_link( $post_type );
22 + $docs_page_title = $post_type_object->labels->name;
23 + } elseif ( $docs_page ) {
24 + $li_classes = ['item-cat item-custom-docs-page'];
25 + $docs_page_url = get_page_link( $docs_page );
26 + $docs_page_title = get_the_title( $docs_page );
27 + }
34 28
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 - ];
29 + $breadcrumbs = [
30 + [
31 + 'li_classes' => ['item-home'],
32 + 'url' => $home_url,
33 + 'text' => stripslashes( $home_text )
34 + ],
35 + [
36 + 'li_classes' => $li_classes,
37 + 'url' => $docs_page_url,
38 + 'text' => $docs_page_title
39 + ]
40 + ];
47 41
48 - if( ! $enable_breadcrumb_home_text ) {
49 - unset($breadcrumbs[0]);
50 - }
42 + $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_before_archives', $breadcrumbs );
43 + if ( $taxanomy == 'doc_category' || is_tax( 'doc_tag' ) ) {
44 + if ( $enable_breadcrumb_category ) {
45 + $query_obj = get_queried_object();
46 + $term_id = $query_obj->term_id;
51 47
52 - $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_before_archives', $breadcrumbs );
48 + $term_parents = betterdocs()->query->get_term_parents( $term_id );
49 + $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_after_archives', array_merge( $breadcrumbs, $term_parents ) );
50 + }
51 + } elseif ( is_single() ) {
52 + global $wp_query, $post;
53 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';
54 + if ( $enable_breadcrumb_category ) {
55 + $cat_terms = [];
56 + if ( isset( $wp_query->query_vars['doc_category'] ) ) {
57 + $term = get_term_by( 'slug', $wp_query->query_vars['doc_category'], 'doc_category' );
58 + if ( ! empty( $term ) ) {
59 + $cat_terms[] = $term;
60 + }
61 + }
57 62
58 - if ( $taxanomy == 'doc_category' ) {
59 - if ( $enable_breadcrumb_category ) {
60 - $query_obj = get_queried_object();
61 - $term_id = $query_obj->term_id;
63 + if ( empty( $cat_terms ) ) {
64 + $cat_terms = wp_get_post_terms( $post->ID, 'doc_category' );
65 + }
62 66
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;
67 + $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_before_single_category', $breadcrumbs );
80 68
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 - }
69 + if ( $cat_terms ) {
70 + $term_parents = betterdocs()->query->get_term_parents( $cat_terms[0]->term_id );
71 + $breadcrumbs = array_merge( $breadcrumbs, $term_parents );
72 + }
73 + }
89 74
90 - if ( empty( $cat_terms ) ) {
91 - $cat_terms = wp_get_post_terms( $post->ID, 'doc_category' );
92 - }
75 + // Check if the post is in a category
76 + if ( $enable_breadcrumb_title ) {
77 + $breadcrumbs[] = [
78 + 'li_classes' => ['item-current', 'item-' . $post->ID, 'current'],
79 + 'url' => '',
80 + 'text' => betterdocs()->template_helper->kses( get_the_title() )
81 + ];
82 + }
83 + }
93 84
94 - $breadcrumbs = apply_filters( 'betterdocs_breadcrumb_before_single_category', $breadcrumbs );
85 + if ( empty( $breadcrumbs ) ) {
86 + return;
87 + }
95 88
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 - }
89 + $_wrapper_attr_array = [
90 + 'class' => ['betterdocs-breadcrumb'],
91 + 'id' => ['betterdocs-breadcrumb']
92 + ];
103 93
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 - }
94 + if ( ! empty( $wrapper_attr_array ) && isset( $widget_type ) && $widget_type === 'betterdocs-breadcrumb' ) {
95 + $wrapper_attr_array['class'][] = 'betterdocs-breadcrumb';
96 + $wrapper_attr_array['id'][] = 'betterdocs-breadcrumb';
97 + } else {
98 + $wrapper_attr_array = $_wrapper_attr_array;
99 + }
113 100
114 - if ( empty( $breadcrumbs ) ) {
115 - return;
116 - }
101 + if ( $widget instanceof \WPDeveloper\BetterDocs\Editors\BlockEditor\Block ) {
102 + $wrapper_attr_array['class'][] = $blockId;
103 + }
117 104
118 - $_wrapper_attr_array = [
119 - 'class' => [ 'betterdocs-breadcrumb' ],
120 - 'id' => [ 'betterdocs-breadcrumb' ]
121 - ];
105 + $wrapper_attr = betterdocs()->template_helper->get_html_attributes( $wrapper_attr_array );
106 +?>
122 107
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 108 <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>
109 + <?php echo $wrapper_attr; ?>>
110 + <ul class="betterdocs-breadcrumb-list">
111 + <?php
112 + foreach ( $breadcrumbs as $breadcrumb ):
113 + $li_classes = ['betterdocs-breadcrumb-item'];
114 + $li_classes = ! empty( $breadcrumb['li_classes'] ) ? array_merge( $li_classes, $breadcrumb['li_classes'] ) : $li_classes;
115 + ?>
116 + <li class="<?php echo implode( ' ', $li_classes );?>">
117 + <?php
118 + if ( empty( $breadcrumb['url'] ) ) {
119 + echo wp_kses_post( '<span>' . $breadcrumb['text'] . '</span>' );
120 + } else {
121 + echo wp_kses_post( wp_sprintf(
122 + "<a href='%s' class='bread-link' title='%s'>%s</a>",
123 + esc_attr( esc_url( $breadcrumb['url'] ) ),
124 + esc_attr( stripslashes( $breadcrumb['text'] ) ),
125 + $breadcrumb['text']
126 + ) );
127 + }
128 + ?>
129 + </li>
130 + <?php if ( next( $breadcrumbs ) ): ?>
131 + <li class="betterdocs-breadcrumb-item breadcrumb-delimiter">
132 + <span class="icon-container">
133 + <svg class="breadcrumb-delimiter-icon svg-inline--fa fa-angle-right fa-w-8" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="angle-right" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512">
134 + <path fill="currentColor" d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path>
135 + </svg>
136 + </span>
137 + </li>
138 + <?php endif;?>
139 +<?php endforeach;?>
140 + </ul>
173 141 </nav>