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

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

187 lines 7.0 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 ];
62 }
63
64 public function generate_attributes() {
65 $attributes = [
66 'class' => [
67 'betterdocs-category-grid-inner-wrapper',
68 $this->layout_class
69 ]
70 ];
71
72 $masonry = (bool) $this->settings->get( 'masonry_layout', false );
73 if ( $this->has( 'masonry' ) ) {
74 $masonry = (bool) $this->attributes['masonry'];
75 }
76
77 if ( ! is_singular( 'docs' ) && ! is_tax( 'doc_category' ) && ! is_tax( 'doc_tag' ) ) {
78 if ( $this->attributes['sidebar_list'] == true ) {
79 $attributes['class'][] = 'layout-flex';
80 } elseif ( $masonry == true ) {
81 wp_enqueue_script( 'masonry' );
82 $attributes['class'][] = 'masonry';
83 } else {
84 $attributes['class'][] = 'layout-flex';
85 }
86 if ( $this->attributes['sidebar_list'] == true ) {
87 $_column_val = 1;
88 } elseif ( $this->isset( 'column' ) ) {
89 $_column_val = $this->attributes['column'];
90 } else {
91 $_column_val = $this->settings->get( 'column_number' );
92 }
93
94 $attributes['class'][] = 'docs-col-' . $_column_val;
95 $attributes['data-column_desktop'] = esc_html( $_column_val );
96 $attributes['style'] = "--column: $_column_val;";
97
98 if ( $this->isset( 'disable_customizer_style', false ) ) {
99 $attributes['class'][] = 'single-kb';
100 }
101 }
102
103
104 return $attributes;
105 }
106
107 public function header_layout_sequence( $sequence, $layout, $widget_type, $args ) {
108 return ['category_icon', 'category_title', 'category_counts', 'collapse_icon'];
109 }
110
111 public function render( $atts, $content = null ) {
112 if ( (bool) $this->attributes['sidebar_list'] ) {
113 add_filter( 'betterdocs_header_layout_sequence', [$this, 'header_layout_sequence'], 10, 4 );
114 }
115
116 $this->views( 'layouts/base' );
117
118 if ( (bool) $this->attributes['sidebar_list'] ) {
119 remove_filter( 'betterdocs_header_layout_sequence', [$this, 'header_layout_sequence'], 10 );
120 }
121 }
122
123 public function view_params() {
124 $exploremore_btn = $this->settings->get( 'exploremore_btn' );
125 $button_text = $this->settings->get( 'exploremore_btn_txt' );
126 $category_title_link = $this->attributes['category_title_link'];
127
128 $show_button = false;
129 if ( $this->attributes['posts_per_page'] == -1 ) {
130 $show_button = false;
131 } elseif ( $exploremore_btn && ! is_singular( 'docs' ) && Helper::get_tax() != 'doc_category' && ! is_tax( 'doc_tag' ) ) {
132 $show_button = true;
133 }
134
135 $terms_query = $this->query->terms_query( [
136 'taxonomy' => $this->attributes['taxonomy'],
137 'multiple_kb' => $this->attributes['multiple_knowledge_base'],
138 'kb_slug' => $this->attributes['kb_slug'],
139 'terms' => $this->attributes['terms'],
140 'order' => $this->attributes['terms_order'],
141 'orderby' => $this->attributes['terms_orderby'],
142 'nested_subcategory' => $this->attributes['nested_subcategory']
143 ] );
144
145 if ( $this->attributes['terms_include'] ) {
146 $terms_query['include'] = $this->attributes['terms_include'];
147 }
148
149 if ( $this->attributes['terms_exclude'] ) {
150 $terms_query['exclude'] = $this->attributes['terms_exclude'];
151 }
152
153 if ( $this->attributes['terms_offset'] ) {
154 $terms_query['offset'] = (int) $this->attributes['terms_offset'];
155 }
156
157 $inner_wrapper_attr = $this->generate_attributes();
158
159 $docs_query = [
160 'orderby' => $this->attributes['orderby'],
161 'order' => $this->attributes['order'],
162 'posts_per_page' => $this->attributes['posts_per_page']
163 ];
164
165 return [
166 'wrapper_attr' => ['class' => ['betterdocs-category-grid-wrapper']],
167 'inner_wrapper_attr' => $inner_wrapper_attr,
168 'layout' => 'default',
169 'widget_type' => 'category-grid',
170
171 'terms_query_args' => $terms_query,
172 'docs_query_args' => $docs_query,
173 'nested_docs_query_args' => $docs_query,
174
175 'show_header' => true,
176 'show_list' => true,
177 'show_title' => true,
178 'show_button' => $show_button,
179 'button_text' => $button_text,
180 'show_button_icon' => true,
181 'button_icon_position' => true,
182 'button_icon' => true,
183 'category_title_link' => $category_title_link
184 ];
185 }
186 }
187