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