PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.8.1
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.8.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 / layouts / base.php

base.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 4.8.1, at views/layouts/base.php

187 lines 6.6 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 ( $terms_query_args == false ) {
8 return;
9 }
10 $terms = get_terms( apply_filters( 'betterdocs_base_terms_args', $terms_query_args ) );
11 /**
12 * Base Layout Before Wrapper
13 */
14 do_action_ref_array( 'betterdocs_base_layout_wrapper_before', [ & $terms ] );
15 ?>
16
17 <div
18 <?php echo $wrapper_attr; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>>
19 <?php
20 /**
21 * Base Layout Before Inner Wrapper
22 */
23 do_action_ref_array( 'betterdocs_base_layout_inner_wrapper_before', [ & $terms ] );
24 ?>
25 <div
26 <?php echo $inner_wrapper_attr; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>>
27 <?php
28 $_defined_vars = get_defined_vars();
29 $_params = isset( $_defined_vars['params'] ) ? $_defined_vars['params'] : [];
30
31 $nested_subcategory = isset( $nested_subcategory ) ? $nested_subcategory : false;
32
33 $_current_queried_object_id = null;
34 $_current_queried_object = get_queried_object();
35
36 if ( $_current_queried_object instanceof \WP_Post ) {
37 $_current_terms = get_the_terms( $_current_queried_object->ID, 'doc_category' );
38 $_current_queried_object_id = isset( $_current_terms[0]->term_id ) ? $_current_terms[0]->term_id : null;
39 } elseif ( $_current_queried_object instanceof \WP_Term ) {
40 $_current_queried_object_id = $_current_queried_object->term_id;
41 }
42
43 $ancestors = [];
44
45 if ( is_single() && ! empty( $_current_queried_object_id ) ) {
46 $_category_ids = wp_get_post_terms( get_the_ID(), 'doc_category', [ 'fields' => 'ids' ] );
47 $ancestors = get_ancestors( $_category_ids[0], 'doc_category' );
48 }
49
50 if ( ! is_wp_error( $terms ) ) {
51 do_action_ref_array( 'betterdocs_layout_base_loop_start', [ & $terms, &$_defined_vars ] );
52
53 $_docs_query_args = [
54 'posts_per_page' => isset( $_params['posts_per_page'] ) ? $_params['posts_per_page'] : 0,
55 'multiple_kb' => isset( $_params['multiple_knowledge_base'] ) ? $_params['multiple_knowledge_base'] : false,
56 'kb_slug' => isset( $_params['kb_slug'] ) ? $_params['kb_slug'] : ''
57 ];
58
59 $docs_query_args = ! isset( $docs_query_args ) ? $_docs_query_args : wp_parse_args( $docs_query_args, $_docs_query_args );
60
61 $terms_count = count( $terms );
62 $terms_number = 1;
63
64 $_term_ids = wp_list_pluck( $terms, 'term_id' );
65 if ( ! empty( $_term_ids ) ) {
66 update_termmeta_cache( $_term_ids );
67 }
68
69 foreach ( $terms as $term ) {
70 $_counts = betterdocs()->query->get_docs_count(
71 $term,
72 $nested_subcategory,
73 [
74 'multiple_knowledge_base' => isset( $_params['multiple_knowledge_base'] ) ? $_params['multiple_knowledge_base'] : false,
75 'kb_slug' => isset( $_params['kb_slug'] ) ? $_params['kb_slug'] : ''
76 ]
77 );
78
79 if ( $_counts <= 0 ) {
80 continue;
81 }
82
83 if ( $widget_type == 'category-box' || ( $widget_type == 'category-grid' && $layout == 'layout-2' ) ) {
84 $_counts = [
85 'counts' => $_counts,
86 'prefix' => ! empty( $count_prefix ) ? $count_prefix : '',
87 'suffix' => ! empty( $count_suffix ) ? $count_suffix : '',
88 'suffix_singular' => ! empty( $count_suffix_singular ) ? $count_suffix_singular : ''
89 ];
90 }
91
92 // Count Sub Terms
93 $sub_terms_count = 0;
94 if ( isset( $_params['taxonomy'] ) && $_params['taxonomy'] == 'doc_category' ) {
95 $sub_terms_count = count( betterdocs()->query->get_all_child_term_ids( $_params['taxonomy'], $term->term_id ) );
96 } elseif ( isset( $_params['taxonomy'] ) && $_params['taxonomy'] == 'knowledge_base' ) {
97 $count_doc_categories = betterdocs()->query->count_doc_categories_for_knowledge_base( $term->slug );
98 $sub_terms_count = $count_doc_categories;
99 }
100
101
102 $permalink = apply_filters(
103 'betterdocs_term_permalink',
104 get_term_link( $term->term_id, $term->taxonomy ),
105 $term,
106 'doc_category',
107 $_params
108 );
109
110 $docs_query_args['term_id'] = $term->term_id;
111 $docs_query_args['term_slug'] = $term->slug;
112 $docs_query_args['nested_subcategory'] = $nested_subcategory;
113
114 $_params = wp_parse_args(
115 [
116 'permalink' => $permalink,
117 'wrapper_class' => [ $layout ],
118 'term' => $term,
119 'counts' => $_counts,
120 'terms_count' => $terms_count,
121 'terms_number' => $terms_number,
122 'sub_terms_count' => $sub_terms_count,
123 'queried_object' => $_current_queried_object,
124 'current_queried_object_id' => $_current_queried_object_id,
125 'ancestors' => $ancestors,
126 'query_args' => betterdocs()->query->docs_query_args( $docs_query_args )
127 ],
128 $_params
129 );
130
131 $template_params = apply_filters( 'betterdocs_template_params', $_params, $layout, $term, $widget_type );
132 $layout_filename = apply_filters( 'betterdocs_layout_filename', $layout, $layout, $widget_type );
133 $layout_filename = sanitize_file_name( $layout_filename );
134
135 betterdocs()->views->get( 'layouts/' . $widget_type . '/' . $layout_filename, $template_params );
136 ++$terms_number;
137 --$terms_count;
138 }
139
140 do_action_ref_array( 'betterdocs_layout_base_loop_end', [ & $terms, &$_defined_vars ] );
141 } else {
142 betterdocs()->views->get( 'layout-parts/no-content' );
143 }
144
145 wp_reset_postdata();
146 ?>
147 </div>
148 <?php
149 /**
150 * Base Layout After Inner Wrapper
151 */
152 do_action_ref_array( 'betterdocs_base_layout_inner_wrapper_after', [ & $terms ] );
153 ?>
154 <div class="clearfix"></div>
155 <?php if ( isset( $is_edit_mode ) && $is_edit_mode && $widget_type == 'category-grid' ) : ?>
156 <script>
157 /**
158 * TODO: Not working in Elementor Editor on first Load.
159 */
160 jQuery(document).ready(function($) {
161 $('.betterdocs-category-grid').each(function() {
162 let $grid = $(this),
163 $layout_mode = $grid.data('layout-mode'),
164 $column = $grid.data('column'),
165 $column_space = $grid.data('column_space');
166 if ($layout_mode === 'masonry') {
167 let masonryItem = $(".betterdocs-single-category-wrapper", $grid);
168 let total_margin = ($column - 1) * $column_space;
169 masonryItem.css("width", "calc((100% - " + total_margin + "px) / " + parseInt($column) + ")");
170 $grid.masonry({
171 itemSelector: ".betterdocs-single-category-wrapper",
172 percentPosition: true,
173 gutter: $column_space
174 });
175 }
176 });
177 });
178 </script>
179 <?php endif; ?>
180 </div>
181 <?php
182 /**
183 * Base Layout After Wrapper
184 */
185 do_action_ref_array( 'betterdocs_base_layout_wrapper_after', [ & $terms ] );
186 ?>
187