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

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