PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 3.6.3
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v3.6.3
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 / includes / Shortcodes / CategoryGrid.php

CategoryGrid.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 3.6.3, at includes/Shortcodes/CategoryGrid.php

200 lines 7.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WPDeveloper\BetterDocs\Shortcodes;
4
5 use WPDeveloper\BetterDocs\Utils\Helper;
6 use WPDeveloper\BetterDocs\Core\Shortcode;
7
8 class CategoryGrid extends Shortcode {
9 protected $layout_class = 'layout-1';
10
11 /**
12 * A list of deprecated attributes.
13 * @var array<string, string>
14 */
15 protected $deprecated_attributes = [
16 'category' => 'taxonomy',
17 'posts_per_grid' => 'posts_per_page',
18 'icon' => 'show_icon',
19 'post_counter' => 'show_count'
20 ];
21
22 public function get_name() {
23 return 'betterdocs_category_grid';
24 }
25
26 public function get_style_depends() {
27 return ['betterdocs-category-grid'];
28 }
29
30 public function get_script_depends() {
31 return ['betterdocs-category-grid'];
32 }
33
34 /**
35 * Summary of default_attributes
36 * @return array
37 */
38 public function default_attributes() {
39 return [
40 'sidebar_list' => false,
41 'taxonomy' => 'doc_category',
42 'show_icon' => true,
43 'masonry' => false,
44 'posts_per_page' => $this->settings->get( 'posts_number', 0 ),
45 'orderby' => $this->settings->get( 'alphabetically_order_post', 'betterdocs_order' ),
46 'order' => $this->settings->get( 'docs_order', 'ASC' ),
47 'show_count' => $this->settings->get( 'post_count' ),
48 'column' => $this->settings->get( 'column_number' ),
49 'nested_subcategory' => $this->settings->get( 'nested_subcategory' ),
50 'terms' => '',
51 'terms_orderby' => '',
52 'terms_order' => '',
53 'terms_include' => '',
54 'terms_exclude' => '',
55 'terms_offset' => '',
56 'kb_slug' => '',
57 'multiple_knowledge_base' => false,
58 'disable_customizer_style' => false,
59 'title_tag' => 'h2',
60 'category_title_link' => false,
61 'layout_type' => '',
62 'list_icon_url' => '',
63 'list_icon_name' => 'list',
64 'sidebar_layout' => ''
65 ];
66 }
67
68 public function generate_attributes() {
69 $attributes = [
70 'class' => [
71 'betterdocs-category-grid-inner-wrapper',
72 $this->layout_class
73 ]
74 ];
75
76 $masonry = (bool) $this->settings->get( 'masonry_layout', false );
77 if ( $this->has( 'masonry' ) ) {
78 $masonry = (bool) $this->attributes['masonry'];
79 }
80
81 if ( ! is_singular( 'docs' ) && ! is_tax( 'doc_category' ) && ! is_tax( 'doc_tag' ) ) {
82 if ( $this->attributes['sidebar_list'] == true ) {
83 $attributes['class'][] = 'layout-flex';
84 } elseif ( $masonry == true ) {
85 wp_enqueue_script( 'masonry' );
86 $attributes['class'][] = 'masonry';
87 } else {
88 $attributes['class'][] = 'layout-flex';
89 }
90 if ( $this->attributes['sidebar_list'] == true ) {
91 $_column_val = 1;
92 } elseif ( $this->isset( 'column' ) ) {
93 $_column_val = $this->attributes['column'];
94 } else {
95 $_column_val = $this->settings->get( 'column_number' );
96 }
97
98 $attributes['class'][] = 'docs-col-' . $_column_val;
99 $attributes['data-column_desktop'] = esc_html( $_column_val );
100 $attributes['style'] = "--column: $_column_val;";
101
102 if ( $this->isset( 'disable_customizer_style', false ) ) {
103 $attributes['class'][] = 'single-kb';
104 }
105 }
106
107 return $attributes;
108 }
109
110 public function header_layout_sequence( $sequence, $layout, $widget_type, $args ) {
111 return ['category_icon', 'category_title', 'category_counts', 'collapse_icon'];
112 }
113
114 public function render( $atts, $content = null ) {
115 if ( (bool) $this->attributes['sidebar_list'] ) {
116 add_filter( 'betterdocs_header_layout_sequence', [$this, 'header_layout_sequence'], 10, 4 );
117 }
118
119 $this->views( 'layouts/base' );
120
121 if ( (bool) $this->attributes['sidebar_list'] ) {
122 remove_filter( 'betterdocs_header_layout_sequence', [$this, 'header_layout_sequence'], 10 );
123 }
124 }
125
126 public function view_params() {
127 $exploremore_btn = $this->settings->get( 'exploremore_btn' );
128 $button_text = $this->settings->get( 'exploremore_btn_txt' );
129 $category_title_link = isset( $this->attributes['category_title_link'] ) ? $this->attributes['category_title_link'] : '';
130
131 $show_button = false;
132 if ( $this->attributes['posts_per_page'] == -1 ) {
133 $show_button = false;
134 } elseif ( $exploremore_btn && ! is_singular( 'docs' ) && Helper::get_tax() != 'doc_category' && ! is_tax( 'doc_tag' ) ) {
135 $show_button = true;
136 }
137
138 $terms_query = $this->query->terms_query( [
139 'taxonomy' => $this->attributes['taxonomy'],
140 'multiple_kb' => $this->attributes['multiple_knowledge_base'],
141 'kb_slug' => $this->attributes['kb_slug'],
142 'terms' => $this->attributes['terms'],
143 'order' => $this->attributes['terms_order'],
144 'orderby' => $this->attributes['terms_orderby'],
145 'nested_subcategory' => $this->attributes['nested_subcategory']
146 ] );
147
148 if ( $this->attributes['terms_include'] ) {
149 $terms_query['include'] = $this->attributes['terms_include'];
150 }
151
152 if ( $this->attributes['terms_exclude'] ) {
153 $terms_query['exclude'] = $this->attributes['terms_exclude'];
154 }
155
156 if ( $this->attributes['terms_offset'] ) {
157 $terms_query['offset'] = (int) $this->attributes['terms_offset'];
158 }
159
160 $inner_wrapper_attr = $this->generate_attributes();
161
162 $docs_query = [
163 'orderby' => $this->attributes['orderby'],
164 'order' => $this->attributes['order'],
165 'posts_per_page' => $this->attributes['posts_per_page']
166 ];
167
168 /**
169 * Add This Attribute When Using Outside Betterdocs Templates Only
170 */
171 if( $this->attributes['multiple_knowledge_base'] && ( !empty( $this->attributes['kb_slug'] ) ) && ( ! betterdocs()->helper->is_templates() ) ) {
172 $inner_wrapper_attr['data-mkb-slug'] = $this->attributes['kb_slug'];
173 }
174
175 return [
176 'wrapper_attr' => ['class' => ['betterdocs-category-grid-wrapper']],
177 'inner_wrapper_attr' => $inner_wrapper_attr,
178 'layout' => 'default',
179 'widget_type' => 'category-grid',
180
181 'terms_query_args' => $terms_query,
182 'docs_query_args' => $docs_query,
183 'nested_docs_query_args' => $docs_query,
184 'list_icon_name' => $this->attributes['list_icon_name'] == 'list' ? 'list' : ['value' => $this->attributes['list_icon_name']],
185 'show_header' => true,
186 'show_list' => true,
187 'show_title' => true,
188 'show_button' => $show_button,
189 'button_text' => $button_text,
190 'show_button_icon' => true,
191 'button_icon_position' => true,
192 'button_icon' => true,
193 'category_title_link' => $category_title_link,
194 'layout_type' => $this->attributes['layout_type'],
195 'list_icon_url' => $this->attributes['list_icon_url'],
196 'sidebar_layout' => $this->attributes['sidebar_layout']
197 ];
198 }
199 }
200