PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 2.0.14
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v2.0.14
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 / gutenberg / blocks / categorygrid.php

categorygrid.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 2.0.14, at includes/gutenberg/blocks/categorygrid.php

233 lines 8.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Functions to register client-side assets (scripts and stylesheets) for the
5 * Gutenberg block.
6 *
7 * @package betterdocs
8 */
9
10 /**
11 * Registers all block assets so that they can be enqueued through Gutenberg in
12 * the corresponding context.
13 *
14 * @see https://wordpress.org/gutenberg/handbook/designers-developers/developers/tutorials/block-tutorial/applying-styles-with-stylesheets/
15 */
16 function betterdocs_categorygrid_block_init()
17 {
18 // Skip block registration if Gutenberg is not enabled/merged.
19 if (!function_exists('register_block_type')) {
20 return;
21 }
22 $dir = dirname(__FILE__);
23
24 $index_js = 'categorygrid/index.js';
25 wp_register_script(
26 'betterdocs-categorygrid-block-editor',
27 plugins_url($index_js, __FILE__),
28 array(
29 'wp-blocks',
30 'wp-i18n',
31 'wp-element',
32 'wp-editor',
33 'wp-block-editor',
34 'masonry',
35 'betterdocs-blocks-edit-post'
36 ),
37 filemtime("$dir/$index_js")
38 );
39
40 $editor_style = 'categorygrid/style.css';
41 wp_register_style(
42 'betterdocs-categorygrid-block-editor',
43 plugins_url($editor_style, __FILE__),
44 array(),
45 filemtime("$dir/$editor_style"),
46 'all'
47 );
48
49 $grid_script = 'categorygrid/assets/js/categorygrid.js';
50 wp_register_script(
51 'betterdocs-categorygrid-js',
52 plugins_url($grid_script, __FILE__),
53 array('masonry'),
54 filemtime("$dir/$grid_script")
55 );
56
57
58
59 register_block_type(__DIR__ . '/categorygrid', array(
60 'editor_script' => 'betterdocs-categorygrid-block-editor',
61 'editor_style' => 'betterdocs-categorygrid-block-editor',
62 'render_callback' => 'betterdocs_categorygrid_server_side_render'
63 ));
64 }
65 add_action('init', 'betterdocs_categorygrid_block_init');
66
67 /**
68 * Category Grid Server Side Render
69 */
70 function betterdocs_categorygrid_server_side_render(array $attributes)
71 {
72 if (!is_admin()) {
73 wp_enqueue_style("betterdocs-categorygrid-block-editor");
74 wp_enqueue_script("betterdocs-categorygrid-js");
75 }
76
77 $attributes = wp_parse_args(
78 $attributes,
79 [
80 'blockId' => '',
81 'categories' => array(),
82 'includeCategories' => '',
83 'excludeCategories' => '',
84 'gridPerPage' => 9,
85 'orderBy' => 'name',
86 'order' => 'asc',
87 'layout' => 'default',
88 'showIcon' => true,
89 'showTitle' => true,
90 'titleTag' => 'h2',
91 'showCount' => true,
92 'showIcon' => true,
93 'showTitle' => true,
94 'showList' => true,
95 'layoutMode' => 'grid',
96 'showHeader' => true,
97 'showButton' => true,
98 'buttonText' => esc_html__('Explore More', 'betterdocs'),
99 'listIcon' => 'far fa-file-alt',
100 'postsPerPage' => 5,
101 'postsOrderBy' => 'date',
102 'postsOrder' => 'asc',
103 'enableNestedSubcategory' => false,
104 'postPerSubcategory' => 3,
105 'buttonIconPosition' => 'after',
106 'buttonIcon' => 'fas fa-angle-right',
107 'buttonPosition' => 'after',
108 'showButtonIcon' => true,
109 'colRange' => 3,
110 'TABcolRange' => 2,
111 'MOBcolRange' => 1,
112 'gridSpaceRange' => 10,
113 'TABgridSpaceRange' => 10,
114 'MOBgridSpaceRange' => 10,
115 ]
116 );
117
118 $blockId = $attributes['blockId'];
119 $includeCategories = $attributes['includeCategories'];
120 $excludeCategories = $attributes['excludeCategories'];
121 $gridPerPage = $attributes['gridPerPage'];
122 $orderBy = $attributes['orderBy'];
123 $order = $attributes['order'];
124 $layout = $attributes['layout'];
125 $showIcon = $attributes['showIcon'];
126 $showTitle = $attributes['showTitle'];
127 $titleTag = $attributes['titleTag'];
128 $showCount = $attributes['showCount'];
129 $enableNestedSubcategory = $attributes['enableNestedSubcategory'];
130 $postsPerPage = $attributes['postsPerPage'];
131 $postsOrderBy = $attributes['postsOrderBy'];
132 $postsOrder = $attributes['postsOrder'];
133 $colRange = $attributes['colRange'];
134 $TABcolRange = $attributes['TABcolRange'];
135 $MOBcolRange = $attributes['MOBcolRange'];
136 $showHeader = $attributes['showHeader'];
137 $showList = $attributes['showList'];
138 $listIcon = $attributes['listIcon'];
139 $showButton = $attributes['showButton'];
140 $showButtonIcon = $attributes['showButtonIcon'];
141 $buttonIconPosition = $attributes['buttonIconPosition'];
142 $buttonIcon = $attributes['buttonIcon'];
143 $buttonText = $attributes['buttonText'];
144 $postPerSubcategory = $attributes['postPerSubcategory'];
145 $layoutMode = $attributes['layoutMode'];
146 $gridSpaceRange = $attributes['gridSpaceRange'];
147 $TABgridSpaceRange = $attributes['TABgridSpaceRange'];
148 $MOBgridSpaceRange = $attributes['MOBgridSpaceRange'];
149 $multiple_kb = false;
150
151 // responsive class name
152 $gridColomnDesktopClass = $colRange ? " betterdocs-grid-$colRange" : "betterdocs-grid-3";
153 $gridColomnTabClass = $TABcolRange ? " betterdocs-grid-tablet-$TABcolRange" : "betterdocs-grid-tablet-2";
154 $gridColomnMobileClass = $MOBcolRange ? " betterdocs-grid-mobile-$MOBcolRange" : "betterdocs-grid-mobile-1";
155
156 $terms_object = array(
157 'taxonomy' => 'doc_category',
158 'order' => $order,
159 'orderby' => $orderBy,
160 'number' => $gridPerPage ? $gridPerPage : 5,
161 'hide_empty' => true,
162 );
163
164 if ('doc_category_order' === $orderBy) {
165 $terms_object['meta_key'] = 'doc_category_order';
166 $terms_object['orderby'] = 'meta_value_num';
167 }
168
169 if ($enableNestedSubcategory) {
170 $terms_object['parent'] = 0;
171 }
172
173 $includes = array();
174 if ($includeCategories && $includeCategories !== '[]') {
175 $includes = json_decode($includeCategories, true);
176 $includes = array_map(function ($item) {
177 return $item['value'];
178 }, $includes);
179 }
180
181 $excludes = array();
182 if ($excludeCategories && $excludeCategories !== '[]') {
183 $excludes = json_decode($excludeCategories, true);
184 $excludes = array_map(function ($item) {
185 return $item['value'];
186 }, $excludes);
187 }
188
189 if (is_array($includes) && count($includes)) {
190 $terms_object['include'] = array_diff($includes, (array) $excludes);
191 }
192
193 if (is_array($excludes) && count($excludes)) {
194 $terms_object['exclude'] = $excludes;
195 }
196
197 $taxonomy_objects = get_terms($terms_object);
198
199 $html = '';
200
201
202 $html .= '<div class="betterdocs-block ' . $blockId . $gridColomnDesktopClass . $gridColomnTabClass . $gridColomnMobileClass . '">';
203 $html .= '<div class="betterdocs-category-grid-wrapper">';
204 $html .= '<div class="betterdocs-category-grid ' . $layoutMode . '" data-column="' . $colRange . '" data-tab-column="' . $TABcolRange . '" data-mobile-column="' . $MOBcolRange . '" data-colomn-space="' . $gridSpaceRange . '" data-tab-colomn-space="' . $TABgridSpaceRange . '" data-mobile-colomn-space="' . $MOBgridSpaceRange . '">';
205
206
207 if ($taxonomy_objects && !is_wp_error($taxonomy_objects)) {
208 foreach ($taxonomy_objects as $term) {
209 $term_id = $term->term_id;
210 $term_slug = $term->slug;
211 $count = $term->count;
212 $get_term_count = betterdocs_get_postcount($count, $term_id, $enableNestedSubcategory);
213 $term_count = apply_filters('betterdocs_postcount', $get_term_count, false, $term_id, $term_slug, $count, $enableNestedSubcategory);
214 if ($term_count > 0) {
215 if ($layout === 'default') {
216 include BETTERDOCS_DIR_PATH . 'includes/gutenberg/template/category-grid/Layout_Default.php';
217 } else if ($layout === 'layout-2') {
218 include BETTERDOCS_DIR_PATH . 'includes/gutenberg/template/category-grid/Layout_2.php';
219 }
220 }
221 }
222 } else {
223 $html .= '<p class="no-posts-found">' . __('No posts found!', 'betterdocs') . '</p>';
224 }
225 wp_reset_postdata();
226
227 $html .= '</div>';
228 $html .= '</div>';
229 $html .= '</div>';
230
231 return $html;
232 }
233