PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 3.5.3
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v3.5.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
← All changes | includes/Core/FAQBuilder.php +551 -630 4.4.03.5.3 View file →
@@ -1,733 +1,654 @@
1 1 <?php
2 2
3 3 namespace WPDeveloper\BetterDocs\Core;
4 4
5 +use WP_Query;
5 6 use WP_Error;
6 -use WP_Query;
7 7 use WPDeveloper\BetterDocs\Utils\Base;
8 -use WPDeveloper\BetterDocs\Utils\Helper;
9 8
10 9 class FAQBuilder extends Base {
11 - /**
12 - * REST API namespace
13 - * @var string
14 - */
15 - private $namespace = 'betterdocs';
16 - public $post_type = 'betterdocs_faq';
17 - public $category = 'betterdocs_faq_category';
10 + /**
11 + * REST API namespace
12 + * @var string
13 + */
14 + private $namespace = 'betterdocs';
15 + public $post_type = 'betterdocs_faq';
16 + public $category = 'betterdocs_faq_category';
18 17
19 - /**
20 - *
21 - * Initialize the class and start calling our hooks and filters
22 - *
23 - * @since 1.0.0
24 - *
25 - */
26 - public function __construct() {
27 - // assign default admin capabilities for docs, doc terms, doc tags, knowledge base
28 - add_action( 'init', [ $this, 'register_post' ] );
29 - // fires after a new betterdocs_faq_category is created
30 - add_action( 'created_betterdocs_faq_category', [ $this, 'action_created_betterdocs_faq_category' ], 10, 2 );
31 - add_action( 'rest_api_init', [ $this, 'register_api_endpoint' ] );
32 - add_action( 'rest_betterdocs_faq_category_query', [ $this, 'faq_category_orderby_meta' ], 10, 2 );
33 - }
18 + /**
19 + *
20 + * Initialize the class and start calling our hooks and filters
21 + *
22 + * @since 1.0.0
23 + *
24 + */
25 + public function __construct() {
26 + // assign default admin capabilities for docs, doc terms, doc tags, knowledge base
27 + add_action( 'init', [$this, 'register_post'] );
28 + // fires after a new betterdocs_faq_category is created
29 + add_action( 'created_betterdocs_faq_category', [$this, 'action_created_betterdocs_faq_category'], 10, 2 );
30 + add_action( 'rest_api_init', [$this, 'register_api_endpoint'] );
31 + add_action('rest_betterdocs_faq_category_query', array($this, 'faq_category_orderby_meta'), 10, 2);
32 + // Enqueue Scripts
33 + add_action( 'admin_enqueue_scripts', [$this, 'enqueue'] );
34 + }
34 35
35 - public function output() {
36 - betterdocs()->views->get( 'admin/faq-builder' );
37 - }
36 + public function enqueue( $hook ) {
37 + if ( $hook === 'betterdocs_page_betterdocs-faq' ) {
38 + betterdocs()->assets->enqueue( 'betterdocs-admin-faq', 'admin/css/faq.css' );
39 + betterdocs()->assets->enqueue( 'betterdocs-admin-faq', 'admin/js/faq.js' );
38 40
39 - /**
40 - *
41 - * Register post type and taxonomies
42 - *
43 - * @since 1.0.0
44 - *
45 - */
46 - public function register_post() {
47 - /**
48 - * Register category taxonomy
49 - */
50 - $category_labels = [
51 - 'name' => __( 'FAQ Categories', 'betterdocs' ),
52 - 'singular_name' => __( 'FAQ Category', 'betterdocs' ),
53 - 'all_items' => __( 'FAQ Categories', 'betterdocs' ),
54 - 'parent_item' => __( 'Parent FAQ Category', 'betterdocs' ),
55 - 'parent_item_colon' => __( 'Parent FAQ Category:', 'betterdocs' ),
56 - 'edit_item' => __( 'Edit Category', 'betterdocs' ),
57 - 'update_item' => __( 'Update Category', 'betterdocs' ),
58 - 'add_new_item' => __( 'Add New FAQ Category', 'betterdocs' ),
59 - 'new_item_name' => __( 'New FAQ Category Name', 'betterdocs' ),
60 - 'menu_name' => __( 'Categories', 'betterdocs' )
61 - ];
41 + // removing emoji support
42 + remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
43 + remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
62 44
63 - $category_args = [
64 - 'hierarchical' => true,
65 - 'public' => false,
66 - 'labels' => $category_labels,
67 - 'show_ui' => true,
68 - 'show_admin_column' => true,
69 - 'query_var' => true,
70 - 'show_in_rest' => true,
71 - 'has_archive' => false,
72 - 'rewrite' => false,
73 - 'capabilities' => [
74 - 'manage_terms' => 'manage_doc_terms',
75 - 'edit_terms' => 'edit_doc_terms',
76 - 'delete_terms' => 'delete_doc_terms',
77 - 'assign_terms' => 'edit_docs'
78 - ]
79 - ];
45 + betterdocs()->assets->localize( 'betterdocs-admin-faq', 'betterdocs', [
46 + 'dir_url' => BETTERDOCS_ABSURL,
47 + 'rest_url' => esc_url_raw( rest_url() ),
48 + 'free_version' => betterdocs()->version,
49 + 'nonce' => wp_create_nonce( 'wp_rest' )
50 + ] );
51 + }
52 + }
80 53
81 - register_taxonomy( $this->category, [ $this->post_type ], $category_args );
82 - register_term_meta( $this->category, 'order', [ 'show_in_rest' => true ] );
83 - register_term_meta( $this->category, 'status', [ 'show_in_rest' => true ] );
84 - register_term_meta( $this->category, '_betterdocs_faq_order', [ 'show_in_rest' => true ] );
85 - register_term_meta( $this->category, 'faq_group_icon', [ 'show_in_rest' => true ]);
54 + public function output() {
55 + betterdocs()->views->get( 'admin/faq-builder' );
56 + }
86 57
87 - /**
88 - * Register post type
89 - */
90 - $labels = [
91 - 'name' => __( 'BetterDocs FAQ', 'betterdocs' ),
92 - 'singular_name' => __( 'BetterDocs FAQ', 'betterdocs' ),
93 - 'menu_name' => __( 'FAQ', 'betterdocs' ),
94 - 'name_admin_bar' => __( 'FAQ', 'betterdocs' ),
95 - 'add_new' => __( 'Add New', 'betterdocs' ),
96 - 'add_new_item' => __( 'Add New FAQ', 'betterdocs' ),
97 - 'new_item' => __( 'New FAQ', 'betterdocs' ),
98 - 'edit_item' => __( 'Edit FAQ', 'betterdocs' ),
99 - 'view_item' => __( 'View FAQ', 'betterdocs' ),
100 - 'all_items' => __( 'All FAQ', 'betterdocs' ),
101 - 'search_items' => __( 'Search FAQ', 'betterdocs' ),
102 - 'parent_item_colorn' => null,
103 - 'not_found' => __( 'No FAQ found', 'betterdocs' ),
104 - 'not_found_in_trash' => __( 'No FAQ found in trash', 'betterdocs' )
105 - ];
58 + /**
59 + *
60 + * Register post type and taxonomies
61 + *
62 + * @since 1.0.0
63 + *
64 + */
65 + public function register_post() {
66 + /**
67 + * Register category taxonomy
68 + */
69 + $category_labels = [
70 + 'name' => __( 'FAQ Categories', 'betterdocs' ),
71 + 'singular_name' => __( 'FAQ Category', 'betterdocs' ),
72 + 'all_items' => __( 'FAQ Categories', 'betterdocs' ),
73 + 'parent_item' => __( 'Parent FAQ Category', 'betterdocs' ),
74 + 'parent_item_colon' => __( 'Parent FAQ Category:', 'betterdocs' ),
75 + 'edit_item' => __( 'Edit Category', 'betterdocs' ),
76 + 'update_item' => __( 'Update Category', 'betterdocs' ),
77 + 'add_new_item' => __( 'Add New FAQ Category', 'betterdocs' ),
78 + 'new_item_name' => __( 'New FAQ Category Name', 'betterdocs' ),
79 + 'menu_name' => __( 'Categories', 'betterdocs' )
80 + ];
106 81
107 - $args = [
108 - 'labels' => $labels,
109 - 'description' => __( 'Add new faq from here', 'betterdocs' ),
110 - 'public' => false,
111 - 'public_queryable' => true,
112 - 'exclude_from_search' => false,
113 - 'show_ui' => true,
114 - 'show_in_menu' => false,
115 - 'query_var' => true,
116 - 'capability_type' => [ 'doc', 'docs' ],
117 - 'hierarchical' => true,
118 - 'map_meta_cap' => true,
119 - 'has_archive' => false,
120 - 'rewrite' => false,
121 - 'show_in_rest' => true,
122 - 'menu_icon' => betterdocs()->assets->icon( 'betterdocs-icon-white.svg' ),
123 - 'supports' => [ 'title', 'editor', 'thumbnail', 'excerpt', 'author', 'revisions', 'custom-fields', 'comments' ]
124 - ];
82 + $category_args = [
83 + 'hierarchical' => true,
84 + 'public' => false,
85 + 'labels' => $category_labels,
86 + 'show_ui' => true,
87 + 'show_admin_column' => true,
88 + 'query_var' => true,
89 + 'show_in_rest' => true,
90 + 'has_archive' => false,
91 + 'rewrite' => false,
92 + 'capabilities' => [
93 + 'manage_terms' => 'manage_doc_terms',
94 + 'edit_terms' => 'edit_doc_terms',
95 + 'delete_terms' => 'delete_doc_terms',
96 + 'assign_terms' => 'edit_docs'
97 + ]
98 + ];
125 99
126 - register_post_type( $this->post_type, $args );
127 - register_post_meta( $this->post_type, 'faq_open_by_default', [ 'show_in_rest' => true, 'single' => true ] );
128 - }
100 + register_taxonomy( $this->category, [$this->post_type], $category_args );
101 + register_term_meta( $this->category, 'order', ['show_in_rest' => true] );
102 + register_term_meta( $this->category, 'status', ['show_in_rest' => true] );
103 + register_term_meta( $this->category, '_betterdocs_faq_order', ['show_in_rest' => true] );
129 104
130 - /**
131 - * Default the taxonomy's terms' order if it's not set.
132 - *
133 - * @param string $tax_slug The taxonomy's slug.
134 - */
135 - public function action_created_betterdocs_faq_category( $term_id ) {
136 - $order = $this->get_max_taxonomy_order( 'betterdocs_faq_category' );
137 - update_term_meta( $term_id, 'order', $order++ );
138 - update_term_meta( $term_id, 'status', 1 );
139 - }
105 + /**
106 + * Register post type
107 + */
108 + $labels = [
109 + 'name' => __( 'BetterDocs FAQ', 'betterdocs' ),
110 + 'singular_name' => __( 'BetterDocs FAQ', 'betterdocs' ),
111 + 'menu_name' => __( 'FAQ', 'betterdocs' ),
112 + 'name_admin_bar' => __( 'FAQ', 'betterdocs' ),
113 + 'add_new' => __( 'Add New', 'betterdocs' ),
114 + 'add_new_item' => __( 'Add New FAQ', 'betterdocs' ),
115 + 'new_item' => __( 'New FAQ', 'betterdocs' ),
116 + 'edit_item' => __( 'Edit FAQ', 'betterdocs' ),
117 + 'view_item' => __( 'View FAQ', 'betterdocs' ),
118 + 'all_items' => __( 'All FAQ', 'betterdocs' ),
119 + 'search_items' => __( 'Search FAQ', 'betterdocs' ),
120 + 'parent_item_colorn' => null,
121 + 'not_found' => __( 'No FAQ found', 'betterdocs' ),
122 + 'not_found_in_trash' => __( 'No FAQ found in trash', 'betterdocs' )
123 + ];
140 124
141 - /**
142 - * Default the taxonomy's terms' order if it's not set.
143 - *
144 - * @param string $tax_slug The taxonomy's slug.
145 - */
146 - public function default_term_order( $tax_slug ) {
147 - $terms = get_terms(
148 - [
149 - 'taxonomy' => $tax_slug,
150 - 'hide_empty' => false,
151 - ]
152 - );
153 - $order = $this->get_max_taxonomy_order( $tax_slug );
125 + $args = [
126 + 'labels' => $labels,
127 + 'description' => __( 'Add new faq from here', 'betterdocs' ),
128 + 'public' => false,
129 + 'public_queryable' => true,
130 + 'exclude_from_search' => false,
131 + 'show_ui' => true,
132 + 'show_in_menu' => false,
133 + 'query_var' => true,
134 + 'capability_type' => ['doc', 'docs'],
135 + 'hierarchical' => true,
136 + 'map_meta_cap' => true,
137 + 'has_archive' => false,
138 + 'rewrite' => false,
139 + 'show_in_rest' => true,
140 + 'menu_icon' => betterdocs()->assets->icon( 'betterdocs-icon-white.svg' ),
141 + 'supports' => ['title', 'editor', 'thumbnail', 'excerpt', 'author', 'revisions', 'custom-fields', 'comments']
142 + ];
154 143
155 - foreach ( $terms as $term ) {
156 - if ( ! get_term_meta( $term->term_id, 'order', true ) ) {
157 - update_term_meta( $term->term_id, 'order', $order );
158 - ++$order;
159 - }
160 - }
161 - }
144 + register_post_type( $this->post_type, $args );
145 + }
162 146
163 - /**
164 - * Get the maximum order for this taxonomy. This will be applied to terms that don't have a tax position.
165 - */
166 - private function get_max_taxonomy_order( $tax_slug ) {
167 - global $wpdb;
168 - // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.QuotedSimplePlaceholder
169 - $max_term_order = $wpdb->get_col(
170 - $wpdb->prepare(
171 - "SELECT MAX( CAST( tm.meta_value AS UNSIGNED ) )
147 + /**
148 + * Default the taxonomy's terms' order if it's not set.
149 + *
150 + * @param string $tax_slug The taxonomy's slug.
151 + */
152 + public function action_created_betterdocs_faq_category( $term_id ) {
153 + $order = $this->get_max_taxonomy_order( 'betterdocs_faq_category' );
154 + update_term_meta( $term_id, 'order', $order++ );
155 + update_term_meta( $term_id, 'status', 1 );
156 + }
157 +
158 + /**
159 + * Default the taxonomy's terms' order if it's not set.
160 + *
161 + * @param string $tax_slug The taxonomy's slug.
162 + */
163 + public function default_term_order( $tax_slug ) {
164 + $terms = get_terms( $tax_slug, ['hide_empty' => false] );
165 + $order = $this->get_max_taxonomy_order( $tax_slug );
166 +
167 + foreach ( $terms as $term ) {
168 + if ( ! get_term_meta( $term->term_id, 'order', true ) ) {
169 + update_term_meta( $term->term_id, 'order', $order );
170 + $order++;
171 + }
172 + }
173 + }
174 +
175 + /**
176 + * Get the maximum order for this taxonomy. This will be applied to terms that don't have a tax position.
177 + */
178 + private function get_max_taxonomy_order( $tax_slug ) {
179 + global $wpdb;
180 +
181 + $max_term_order = $wpdb->get_col(
182 + $wpdb->prepare(
183 + "SELECT MAX( CAST( tm.meta_value AS UNSIGNED ) )
172 184 FROM $wpdb->terms t
173 185 JOIN $wpdb->term_taxonomy tt ON t.term_id = tt.term_id AND tt.taxonomy = '%s'
174 186 JOIN $wpdb->termmeta tm ON tm.term_id = t.term_id WHERE tm.meta_key = 'order'",
175 - $tax_slug
176 - )
177 - );
187 + $tax_slug
188 + )
189 + );
178 190
179 - $max_term_order = is_array( $max_term_order ) ? current( $max_term_order ) : 0;
191 + $max_term_order = is_array( $max_term_order ) ? current( $max_term_order ) : 0;
180 192
181 - return (int) $max_term_order === 0 || empty( $max_term_order ) ? 1 : (int) $max_term_order + 1;
182 - }
193 + return (int) $max_term_order === 0 || empty( $max_term_order ) ? 1 : (int) $max_term_order + 1;
194 + }
183 195
184 - /**
185 - * Re-Order the taxonomies based on the order value.
186 - *
187 - * @param array $pieces Array of SQL query clauses.
188 - * @param array $taxonomies Array of taxonomy names.
189 - * @param array $args Array of term query args.
190 - */
191 - public function set_tax_order( $pieces, $taxonomies, $args ) {
192 - foreach ( $taxonomies as $taxonomy ) {
193 - global $wpdb;
196 + /**
197 + * Re-Order the taxonomies based on the order value.
198 + *
199 + * @param array $pieces Array of SQL query clauses.
200 + * @param array $taxonomies Array of taxonomy names.
201 + * @param array $args Array of term query args.
202 + */
203 + public function set_tax_order( $pieces, $taxonomies, $args ) {
204 + foreach ( $taxonomies as $taxonomy ) {
205 + global $wpdb;
194 206
195 - if ( $taxonomy === 'betterdocs_faq_category' ) {
196 - $join_statement = " LEFT JOIN $wpdb->termmeta AS term_meta ON t.term_id = term_meta.term_id AND term_meta.meta_key = 'order'";
207 + if ( $taxonomy === 'betterdocs_faq_category' ) {
208 + $join_statement = " LEFT JOIN $wpdb->termmeta AS term_meta ON t.term_id = term_meta.term_id AND term_meta.meta_key = 'order'";
197 209
198 - if ( ! $this->does_substring_exist( $pieces['join'], $join_statement ) ) {
199 - $pieces['join'] .= $join_statement;
200 - }
210 + if ( ! $this->does_substring_exist( $pieces['join'], $join_statement ) ) {
211 + $pieces['join'] .= $join_statement;
212 + }
201 213
202 - $pieces['orderby'] = 'ORDER BY CAST( term_meta.meta_value AS UNSIGNED )';
203 - }
204 - }
214 + $pieces['orderby'] = 'ORDER BY CAST( term_meta.meta_value AS UNSIGNED )';
215 + }
216 + }
205 217
206 - return $pieces;
207 - }
218 + return $pieces;
219 + }
208 220
209 - /**
210 - * Order the taxonomies on the front end.
211 - */
212 - public function front_end_order_terms() {
213 - if ( ! is_admin() ) {
214 - add_filter( 'terms_clauses', [ $this, 'set_tax_order' ], 10, 3 );
215 - }
216 - }
221 + /**
222 + * Order the taxonomies on the front end.
223 + */
224 + public function front_end_order_terms() {
225 + if ( ! is_admin() ) {
226 + add_filter( 'terms_clauses', [$this, 'set_tax_order'], 10, 3 );
227 + }
228 + }
217 229
218 - /**
219 - * Check if a substring exists inside a string.
220 - *
221 - * @param string $string The main string (haystack) we're searching in.
222 - * @param string $substring The substring we're searching for.
223 - *
224 - * @return bool True if substring exists, else false.
225 - */
226 - protected function does_substring_exist( $string, $substring ) {
227 - return strstr( $string, $substring ) !== false;
228 - }
230 + /**
231 + * Check if a substring exists inside a string.
232 + *
233 + * @param string $string The main string (haystack) we're searching in.
234 + * @param string $substring The substring we're searching for.
235 + *
236 + * @return bool True if substring exists, else false.
237 + */
238 + protected function does_substring_exist( $string, $substring ) {
239 + return strstr( $string, $substring ) !== false;
240 + }
229 241
230 - public function register_api_endpoint() {
231 - register_rest_route(
232 - $this->namespace,
233 - '/faq/sample_data',
234 - [
235 - 'methods' => [ 'POST' ],
236 - 'callback' => [ $this, 'create_faq_sample' ],
237 - 'permission_callback' => function () {
238 - return current_user_can( 'edit_others_posts' );
239 - }
240 - ]
241 - );
242 + public function register_api_endpoint() {
243 + register_rest_route( $this->namespace, '/faq/sample_data', [
244 + 'methods' => ['POST'],
245 + 'callback' => [$this, 'create_faq_sample'],
246 + 'permission_callback' => function () {
247 + return current_user_can( 'edit_others_posts' );
248 + }
249 + ] );
242 250
243 - register_rest_route(
244 - $this->namespace,
245 - '/faq/posts/(?P<type>\S+)',
246 - [
247 - 'methods' => [ 'GET' ],
248 - 'callback' => [ $this, 'fetch_faq_posts' ],
249 - 'permission_callback' => function () {
250 - return current_user_can( 'edit_others_posts' );
251 - }
252 - ]
253 - );
251 + register_rest_route( $this->namespace, '/faq/posts/(?P<type>\S+)', [
252 + 'methods' => ['GET'],
253 + 'callback' => [$this, 'fetch_faq_posts'],
254 + 'permission_callback' => '__return_true'
255 + ] );
254 256
255 - register_rest_route(
256 - $this->namespace,
257 - '/faq/create_category',
258 - [
259 - 'methods' => [ 'POST' ],
260 - 'callback' => [ $this, 'create_faq_category' ],
261 - 'permission_callback' => function () {
262 - return current_user_can( 'edit_others_posts' );
263 - }
264 - ]
265 - );
257 + register_rest_route( $this->namespace, '/faq/create_category', [
258 + 'methods' => ['POST'],
259 + 'callback' => [$this, 'create_faq_category'],
260 + 'permission_callback' => function () {
261 + return current_user_can( 'edit_others_posts' );
262 + }
263 + ] );
266 264
267 - register_rest_route(
268 - $this->namespace,
269 - '/faq/update_category',
270 - [
271 - 'methods' => [ 'POST' ],
272 - 'callback' => [ $this, 'update_faq_category' ],
273 - 'permission_callback' => function () {
274 - return current_user_can( 'edit_others_posts' );
275 - }
276 - ]
277 - );
265 + register_rest_route( $this->namespace, '/faq/update_category', [
266 + 'methods' => ['POST'],
267 + 'callback' => [$this, 'update_faq_category'],
268 + 'permission_callback' => function () {
269 + return current_user_can( 'edit_others_posts' );
270 + }
271 + ] );
278 272
279 - register_rest_route(
280 - $this->namespace,
281 - '/faq/delete_category',
282 - [
283 - 'methods' => [ 'POST' ],
284 - 'callback' => [ $this, 'delete_faq_category' ],
285 - 'permission_callback' => function () {
286 - return current_user_can( 'edit_others_posts' );
287 - }
288 - ]
289 - );
273 + register_rest_route( $this->namespace, '/faq/delete_category', [
274 + 'methods' => ['POST'],
275 + 'callback' => [$this, 'delete_faq_category'],
276 + 'permission_callback' => function () {
277 + return current_user_can( 'edit_others_posts' );
278 + }
279 + ] );
290 280
291 - register_rest_route(
292 - $this->namespace,
293 - '/faq/create_post',
294 - [
295 - 'methods' => [ 'POST' ],
296 - 'callback' => [ $this, 'create_betterdocs_faq' ],
297 - 'permission_callback' => function () {
298 - return current_user_can( 'edit_others_posts' );
299 - }
300 - ]
301 - );
281 + register_rest_route( $this->namespace, '/faq/create_post', [
282 + 'methods' => ['POST'],
283 + 'callback' => [$this, 'create_betterdocs_faq'],
284 + 'permission_callback' => function () {
285 + return current_user_can( 'edit_others_posts' );
286 + }
287 + ] );
302 288
303 - register_rest_route(
304 - $this->namespace,
305 - '/faq/update_post',
306 - [
307 - 'methods' => [ 'POST' ],
308 - 'callback' => [ $this, 'update_betterdocs_faq' ],
309 - 'permission_callback' => function () {
310 - return current_user_can( 'edit_others_posts' );
311 - }
312 - ]
313 - );
289 + register_rest_route( $this->namespace, '/faq/update_post', [
290 + 'methods' => ['POST'],
291 + 'callback' => [$this, 'update_betterdocs_faq'],
292 + 'permission_callback' => function () {
293 + return current_user_can( 'edit_others_posts' );
294 + }
295 + ] );
314 296
315 - register_rest_route(
316 - $this->namespace,
317 - '/faq/delete_post',
318 - [
319 - 'methods' => [ 'POST' ],
320 - 'callback' => [ $this, 'delete_betterdocs_faq' ],
321 - 'permission_callback' => function () {
322 - return current_user_can( 'edit_others_posts' );
323 - }
324 - ]
325 - );
297 + register_rest_route( $this->namespace, '/faq/delete_post', [
298 + 'methods' => ['POST'],
299 + 'callback' => [$this, 'delete_betterdocs_faq'],
300 + 'permission_callback' => function () {
301 + return current_user_can( 'edit_others_posts' );
302 + }
303 + ] );
326 304
327 - register_rest_route(
328 - $this->namespace,
329 - '/faq/category_status',
330 - [
331 - 'methods' => [ 'POST' ],
332 - 'callback' => [ $this, 'update_category_status' ],
333 - 'permission_callback' => function () {
334 - return current_user_can( 'edit_others_posts' );
335 - }
336 - ]
337 - );
305 + register_rest_route( $this->namespace, '/faq/category_status', [
306 + 'methods' => ['POST'],
307 + 'callback' => [$this, 'update_category_status'],
308 + 'permission_callback' => function () {
309 + return current_user_can( 'edit_others_posts' );
310 + }
311 + ] );
338 312
339 - register_rest_route(
340 - $this->namespace,
341 - '/faq/category_order',
342 - [
343 - 'methods' => [ 'POST' ],
344 - 'callback' => [ $this, 'update_faq_category_order' ],
345 - 'permission_callback' => function () {
346 - return current_user_can( 'edit_others_posts' );
347 - }
348 - ]
349 - );
313 + register_rest_route( $this->namespace, '/faq/category_order', [
314 + 'methods' => ['POST'],
315 + 'callback' => [$this, 'update_faq_category_order'],
316 + 'permission_callback' => function () {
317 + return current_user_can( 'edit_others_posts' );
318 + }
319 + ] );
350 320
351 - register_rest_route(
352 - $this->namespace,
353 - '/faq/update_order_by_category',
354 - [
355 - 'methods' => [ 'POST' ],
356 - 'callback' => [ $this, 'update_faq_order_by_category' ],
357 - 'permission_callback' => function () {
358 - return current_user_can( 'edit_others_posts' );
359 - }
360 - ]
361 - );
321 + register_rest_route( $this->namespace, '/faq/update_order_by_category', [
322 + 'methods' => ['POST'],
323 + 'callback' => [$this, 'update_faq_order_by_category'],
324 + 'permission_callback' => function () {
325 + return current_user_can( 'edit_others_posts' );
326 + }
327 + ] );
362 328
363 - register_rest_route(
364 - $this->namespace,
365 - '/faq/uncategorised',
366 - [
367 - 'methods' => [ 'GET' ],
368 - 'callback' => [ $this, 'get_uncategorised_faq' ],
369 - 'permission_callback' => function () {
370 - return current_user_can( 'edit_others_posts' );
371 - }
372 - ]
373 - );
329 + register_rest_route( $this->namespace, '/faq/uncategorised', [
330 + 'methods' => ['GET'],
331 + 'callback' => [$this, 'get_uncategorised_faq'],
332 + 'permission_callback' => '__return_true'
333 + ] );
374 334
375 - register_rest_route(
376 - $this->namespace,
377 - '/faq/category_search',
378 - [
379 - 'methods' => [ 'GET' ],
380 - 'callback' => [ $this, 'category_search' ],
381 - 'permission_callback' => function () {
382 - return current_user_can( 'edit_others_posts' );
383 - },
384 - 'args' => [
385 - 'title' => [
386 - 'type' => 'string',
387 - 'required' => true,
388 - 'sanitize_callback' => 'sanitize_text_field'
389 - ]
390 - ]
391 - ]
392 - );
393 - }
335 + register_rest_route( $this->namespace, '/faq/category_search', [
336 + 'methods' => ['GET'],
337 + 'callback' => [$this, 'category_search'],
338 + 'permission_callback' => '__return_true',
339 + 'args' => array(
340 + 'title' => array(
341 + 'type' => 'string',
342 + 'required' => true
343 + ),
344 + ),
345 + ] );
346 + }
394 347
395 - public function create_faq_sample( $params ) {
396 - $sample_data = json_decode( $params->get_param( 'sample_data' ), true );
397 - foreach ( $sample_data as $key => $value ) {
398 - $insert_term = wp_insert_term(
399 - $key,
400 - 'betterdocs_faq_category'
401 - );
402 - if ( $insert_term ) {
403 - foreach ( $value['posts'] as $key => $value ) {
404 - $this->insert_betterdocs_faq( $value['post_title'], $value['post_content'], $insert_term['term_id'] );
405 - }
406 - }
407 - }
408 - return true;
409 - }
348 + public function create_faq_sample( $params ) {
349 + $sample_data = json_decode( $params->get_param( 'sample_data' ), true );
350 + foreach ( $sample_data as $key => $value ) {
351 + $insert_term = wp_insert_term(
352 + $key,
353 + 'betterdocs_faq_category'
354 + );
355 + if ( $insert_term ) {
356 + foreach ( $value['posts'] as $key => $value ) {
357 + $this->insert_betterdocs_faq( $value['post_title'], $value['post_content'], $insert_term['term_id'] );
358 + }
359 + }
360 + }
361 + return true;
362 + }
410 363
411 - public function create_faq_category( $params ) {
412 - $title = $params->get_param( 'title' );
413 - $description = $params->get_param( 'description' );
414 - $description = ( $description !== 'undefined' ) ? $description : '';
415 - $slug = $params->get_param( 'slug' );
416 - $group_icon_url = $params->get_param('group_icon_url');
417 - return $this->insert_betterdocs_faq_category( $title, $description, $group_icon_url, $slug );
418 - }
364 + public function create_faq_category( $params ) {
365 + $title = $params->get_param( 'title' );
366 + $description = $params->get_param( 'description' );
367 + $description = ( $description !== 'undefined' ) ? $description : '';
368 + $slug = $params->get_param( 'slug' );
369 + return $this->insert_betterdocs_faq_category( $title, $description, $slug );
370 + }
419 371
420 - public function update_faq_category( $params ) {
421 - $term_id = $params->get_param( 'term_id' );
422 - $title = $params->get_param( 'title' );
423 - $description = $params->get_param( 'description' );
424 - $group_icon_url = $params->get_param('group_icon_url');
425 - $description = ( $description !== 'undefined' ) ? $description : '';
426 - $slug = $params->get_param( 'slug' );
427 - $update = wp_update_term(
428 - $term_id,
429 - 'betterdocs_faq_category',
430 - [
431 - 'name' => $title,
432 - 'slug' => $slug,
433 - 'description' => $description
434 - ]
435 - );
372 + public function update_faq_category( $params ) {
373 + $term_id = $params->get_param( 'term_id' );
374 + $title = $params->get_param( 'title' );
375 + $description = $params->get_param( 'description' );
376 + $description = ( $description !== 'undefined' ) ? $description : '';
377 + $slug = $params->get_param( 'slug' );
378 + $update = wp_update_term( $term_id, 'betterdocs_faq_category', [
379 + 'name' => $title,
380 + 'slug' => $slug,
381 + 'description' => $description
382 + ] );
436 383
437 - if ( is_wp_error( $update ) ) {
438 - return $update;
439 - } else {
440 - $term_id = isset( $update['term_id'] ) ? $update['term_id'] : 0;
441 - if( $term_id != 0 ) {
442 - $previous_icon_url = get_term_meta($term_id, 'faq_group_icon', true);
443 - update_term_meta($term_id, 'faq_group_icon', $group_icon_url, $previous_icon_url);
444 - }
445 - return true;
446 - }
447 - }
384 + if ( is_wp_error( $update ) ) {
385 + return $update;
386 + } else {
387 + return true;
388 + }
389 + }
448 390
449 391 public function delete_faq_category( $params ) {
450 392 $term_id = $params->get_param( 'term_id' );
451 - $delete_all_docs = $params->get_param('with_all_post');
393 + $delete = wp_delete_term( $term_id, 'betterdocs_faq_category' );
452 394
453 - if ( $delete_all_docs ) {
454 - Helper::delete_specific_faq_posts_by_faq_category( $term_id );
395 + if ( is_wp_error( $delete ) ) {
396 + return $delete;
397 + } else {
398 + return true;
455 399 }
400 + }
456 401
457 - $delete = wp_delete_term( $term_id, 'betterdocs_faq_category' );
402 + public function insert_betterdocs_faq_category( $title, $description, $slug = '' ) {
403 + $insert_term = wp_insert_term(
404 + $title,
405 + 'betterdocs_faq_category',
406 + [
407 + 'slug' => $slug,
408 + 'description' => $description
409 + ]
410 + );
458 411
459 - if ( is_wp_error( $delete ) ) {
460 - return $delete;
461 - } else {
462 - return true;
463 - }
464 - }
412 + if ( is_wp_error( $insert_term ) ) {
413 + return $insert_term;
414 + } else {
415 + return true;
416 + }
417 + }
465 418
466 - public function insert_betterdocs_faq_category( $title, $description, $icon_url, $slug = '' ) {
467 - $insert_term = wp_insert_term(
468 - $title,
469 - 'betterdocs_faq_category',
470 - [
471 - 'slug' => $slug,
472 - 'description' => $description
473 - ]
474 - );
419 + public function update_faq_category_order( $params ) {
420 + $faq_category_order = $params->get_param( 'faq_category_order' );
421 + $faq_category_order = json_decode( $faq_category_order, true );
475 422
476 - if ( is_wp_error( $insert_term ) ) {
477 - return $insert_term;
478 - } else {
479 - $term_id = isset( $insert_term['term_id'] ) ? $insert_term['term_id'] : 0;
480 - if( $term_id != 0 ) {
481 - update_term_meta($term_id, 'faq_group_icon', $icon_url);
482 - }
483 - return true;
484 - }
485 - }
423 + foreach ( $faq_category_order as $order_data ) {
424 + if ( (int) $order_data['current_position'] != (int) $order_data['updated_position'] ) {
425 + update_term_meta( $order_data['id'], 'order', ( (int) $order_data['updated_position'] ) );
426 + }
427 + }
428 + return true;
429 + }
486 430
487 - public function update_faq_category_order( $params ) {
488 - $faq_category_order = $params->get_param( 'faq_category_order' );
489 - $faq_category_order = json_decode( $faq_category_order, true );
431 + public function insert_betterdocs_faq( $post_title, $post_content, $term_id ) {
432 + $post = wp_insert_post(
433 + [
434 + 'post_type' => 'betterdocs_faq',
435 + 'post_title' => wp_strip_all_tags( $post_title ),
436 + 'post_content' => $post_content,
437 + 'post_status' => 'publish'
438 + ]
439 + );
490 440
491 - foreach ( $faq_category_order as $order_data ) {
492 - if ( (int) $order_data['current_position'] != (int) $order_data['updated_position'] ) {
493 - update_term_meta( $order_data['id'], 'order', ( (int) $order_data['updated_position'] ) );
494 - }
495 - }
496 - return true;
497 - }
441 + if ( $term_id ) {
442 + $set_terms = wp_set_object_terms( $post, $term_id, 'betterdocs_faq_category' );
443 + if ( is_wp_error( $set_terms ) ) {
444 + return $set_terms;
445 + } else {
446 + return $this->update_faq_order_on_insert( $term_id, $post );
447 + }
448 + } else {
449 + return $post;
450 + }
451 + }
498 452
499 - public function insert_betterdocs_faq( $post_title, $post_content, $term_id ) {
500 - $post = wp_insert_post(
501 - [
502 - 'post_type' => 'betterdocs_faq',
503 - 'post_title' => wp_strip_all_tags( $post_title ),
504 - 'post_content' => $post_content,
505 - 'post_status' => 'publish'
506 - ]
507 - );
453 + public function update_faq_order_on_insert( $term_id, $post ) {
454 + $term_meta = get_term_meta( $term_id, '_betterdocs_faq_order' );
455 + if ( ! empty( $term_meta ) ) {
456 + $term_meta_arr = explode( ",", $term_meta[0] );
457 + if ( ! in_array( $post, $term_meta_arr ) ) {
458 + array_unshift( $term_meta_arr, $post );
459 + $docs_ordering_data = filter_var_array( wp_unslash( $term_meta_arr ), FILTER_SANITIZE_NUMBER_INT );
460 + return update_term_meta( $term_id, '_betterdocs_faq_order', implode( ',', $docs_ordering_data ) );
461 + }
462 + } else {
463 + return update_term_meta( $term_id, '_betterdocs_faq_order', $post );
464 + }
465 + }
508 466
509 - if ( $term_id ) {
510 - $set_terms = wp_set_object_terms( $post, $term_id, 'betterdocs_faq_category' );
511 - if ( is_wp_error( $set_terms ) ) {
512 - return $set_terms;
513 - } else {
514 - return $this->update_faq_order_on_insert( $term_id, $post );
515 - }
516 - } else {
517 - return $post;
518 - }
519 - }
467 + /**
468 + * Update _betterdocs_faq_order meta when new post created
469 + */
520 470
521 - public function update_faq_order_on_insert( $term_id, $post ) {
522 - $term_meta = get_term_meta( $term_id, '_betterdocs_faq_order' );
523 - if ( ! empty( $term_meta ) ) {
524 - $term_meta_arr = explode( ',', $term_meta[0] );
525 - if ( ! in_array( $post, $term_meta_arr ) ) {
526 - array_unshift( $term_meta_arr, $post );
527 - $docs_ordering_data = filter_var_array( wp_unslash( $term_meta_arr ), FILTER_SANITIZE_NUMBER_INT );
528 - return update_term_meta( $term_id, '_betterdocs_faq_order', implode( ',', $docs_ordering_data ) );
529 - }
530 - } else {
531 - return update_term_meta( $term_id, '_betterdocs_faq_order', $post );
532 - }
533 - }
471 + public function update_faq_order_by_category( $params ) {
472 + $term_id = $params->get_param( 'term_id' );
473 + $posts = $params->get_param( 'posts' );
474 + return update_term_meta( $term_id, '_betterdocs_faq_order', $posts );
475 + }
534 476
535 - /**
536 - * Update _betterdocs_faq_order meta when new post created
537 - */
477 + public function create_betterdocs_faq( $params ) {
478 + $post_title = $params->get_param( 'post_title' );
479 + $post_content = $params->get_param( 'post_content' );
480 + $term_id = $params->get_param( 'term_id' );
481 + return $this->insert_betterdocs_faq( $post_title, $post_content, $term_id );
482 + }
538 483
539 - public function update_faq_order_by_category( $params ) {
540 - $term_id = $params->get_param( 'term_id' );
541 - $posts = $params->get_param( 'posts' );
542 - return update_term_meta( $term_id, '_betterdocs_faq_order', $posts );
543 - }
484 + public function update_betterdocs_faq( $params ) {
485 + $post_id = $params->get_param( 'post_id' );
486 + $post_title = $params->get_param( 'post_title' );
487 + $post_content = $params->get_param( 'post_content' );
488 + $status = $params->get_param( 'status' );
489 + $term_id = $params->get_param( 'term_id' );
490 + if ( $status ) {
491 + $data = [
492 + 'post_type' => 'betterdocs_faq',
493 + 'ID' => $post_id,
494 + 'status' => $status
495 + ];
496 + } else {
497 + $data = [
498 + 'post_type' => 'betterdocs_faq',
499 + 'ID' => $post_id,
500 + 'post_title' => $post_title,
501 + 'post_content' => $post_content
502 + ];
544 503
545 - public function create_betterdocs_faq( $params ) {
546 - $post_title = $params->get_param( 'post_title' );
547 - $post_content = $params->get_param( 'post_content' );
548 - $term_id = $params->get_param( 'term_id' );
549 - return $this->insert_betterdocs_faq( $post_title, $post_content, $term_id );
550 - }
504 + if ( $term_id ) {
505 + $data['tax_input'] = [
506 + "betterdocs_faq_category" => $term_id
507 + ];
551 508
552 - public function update_betterdocs_faq( $params ) {
553 - $post_id = $params->get_param( 'post_id' );
554 - $post_title = $params->get_param( 'post_title' );
555 - $post_content = $params->get_param( 'post_content' );
556 - $status = $params->get_param( 'status' );
557 - $term_id = $params->get_param( 'term_id' );
558 - if ( $status ) {
559 - $data = [
560 - 'post_type' => 'betterdocs_faq',
561 - 'ID' => $post_id,
562 - 'status' => $status
563 - ];
564 - } else {
565 - $data = [
566 - 'post_type' => 'betterdocs_faq',
567 - 'ID' => $post_id,
568 - 'post_title' => $post_title,
569 - 'post_content' => $post_content
570 - ];
509 + $term_meta = get_term_meta( $term_id, '_betterdocs_faq_order' );
510 + $term_meta_arr = explode( ",", $term_meta[0] );
511 + if ( ! in_array( $post_id, $term_meta_arr ) ) {
512 + array_unshift( $term_meta_arr, $post_id );
513 + $docs_ordering_data = filter_var_array( wp_unslash( $term_meta_arr ), FILTER_SANITIZE_NUMBER_INT );
514 + update_term_meta( $term_id, '_betterdocs_faq_order', implode( ',', $docs_ordering_data ) );
515 + }
516 + }
517 + }
571 518
572 - if ( $term_id ) {
573 - $data['tax_input'] = [
574 - 'betterdocs_faq_category' => $term_id
575 - ];
519 + return wp_update_post( $data );
520 + }
576 521
577 - $term_meta = get_term_meta( $term_id, '_betterdocs_faq_order' );
578 - $term_meta_arr = explode( ',', $term_meta[0] );
579 - if ( ! in_array( $post_id, $term_meta_arr ) ) {
580 - array_unshift( $term_meta_arr, $post_id );
581 - $docs_ordering_data = filter_var_array( wp_unslash( $term_meta_arr ), FILTER_SANITIZE_NUMBER_INT );
582 - update_term_meta( $term_id, '_betterdocs_faq_order', implode( ',', $docs_ordering_data ) );
583 - }
584 - }
585 - }
522 + public function delete_betterdocs_faq( $params ) {
523 + $post_id = $params->get_param( 'post_id' );
524 + return wp_delete_post( $post_id );
525 + }
586 526
587 - return wp_update_post( $data );
588 - }
527 + public function faq_post_loop( $args ) {
528 + $posts = [];
529 + $query = new WP_Query( $args );
530 + if ( $query->have_posts() ):
531 + while ( $query->have_posts() ): $query->the_post();
532 + $posts[get_the_ID()]['title'] = get_the_title();
533 + $posts[get_the_ID()]['content'] = get_the_content();
534 + endwhile;
535 + endif;
589 536
590 - public function delete_betterdocs_faq( $params ) {
591 - $post_id = $params->get_param( 'post_id' );
592 - return wp_delete_post( $post_id );
593 - }
537 + return $posts;
538 + }
594 539
595 - public function faq_post_loop( $args ) {
596 - $posts = [];
597 - $query = new WP_Query( $args );
598 - if ( $query->have_posts() ) :
599 - while ( $query->have_posts() ) :
600 - $query->the_post();
601 - $posts[ get_the_ID() ]['title'] = get_the_title();
602 - $posts[ get_the_ID() ]['content'] = get_the_content();
603 - endwhile;
604 - endif;
540 + public function update_category_status( $params ) {
541 + $term_id = $params->get_param( 'term_id' );
542 + $status = $params->get_param( 'status' );
543 + return update_term_meta( $term_id, 'status', $status );
544 + }
605 545
606 - return $posts;
607 - }
546 + public function fetch_faq_posts( $params ) {
547 + $faq = [];
548 + $type = $params->get_param( 'type' );
608 549
609 - public function update_category_status( $params ) {
610 - $term_id = $params->get_param( 'term_id' );
611 - $status = $params->get_param( 'status' );
612 - return update_term_meta( $term_id, 'status', $status );
613 - }
550 + if ( $type == 'category' ) {
551 + $taxonomy_objects = get_terms( 'betterdocs_faq_category', [
552 + 'hide_empty' => false
553 + ] );
614 554
615 - public function fetch_faq_posts( $params ) {
616 - $faq = [];
617 - $type = $params->get_param( 'type' );
555 + if ( $taxonomy_objects && ! is_wp_error( $taxonomy_objects ) ):
556 + foreach ( $taxonomy_objects as $term ):
557 + $args = [
558 + 'post_type' => 'betterdocs_faq',
559 + 'post_status' => 'publish',
560 + 'post_per_page' => -1,
561 + 'tax_query' => [
562 + [
563 + 'taxonomy' => 'betterdocs_faq_category',
564 + 'field' => 'term_id',
565 + 'terms' => $term->term_id
566 + ]
567 + ]
568 + ];
618 569
619 - if ( $type == 'category' ) {
620 - $taxonomy_objects = get_terms(
621 - [
622 - 'taxonomy' => 'betterdocs_faq_category',
623 - 'hide_empty' => false
624 - ]
625 - );
570 + $posts = $this->faq_post_loop( $args );
626 571
627 - if ( $taxonomy_objects && ! is_wp_error( $taxonomy_objects ) ) :
628 - foreach ( $taxonomy_objects as $term ) :
629 - $args = [
630 - 'post_type' => 'betterdocs_faq',
631 - 'post_status' => 'publish',
632 - 'post_per_page' => -1,
633 - 'tax_query' => [
634 - [
635 - 'taxonomy' => 'betterdocs_faq_category',
636 - 'field' => 'term_id',
637 - 'terms' => $term->term_id
638 - ]
639 - ]
640 - ];
572 + $faq[$term->slug] = [
573 + (array) $term,
574 + 'posts' => $posts
575 + ];
576 + endforeach;
577 + endif;
578 + } else {
579 + $args = [
580 + 'post_type' => 'betterdocs_faq',
581 + 'post_status' => 'publish',
582 + 'post_per_page' => -1
583 + ];
584 + $posts = $this->faq_post_loop( $args );
585 + $faq['posts'] = $posts;
586 + }
641 587
642 - $posts = $this->faq_post_loop( $args );
588 + return $faq;
589 + }
643 590
644 - $faq[ $term->slug ] = [
645 - (array) $term,
646 - 'posts' => $posts
647 - ];
648 - endforeach;
649 - endif;
650 - } else {
651 - $args = [
652 - 'post_type' => 'betterdocs_faq',
653 - 'post_status' => 'publish',
654 - 'post_per_page' => -1
655 - ];
656 - $posts = $this->faq_post_loop( $args );
657 - $faq['posts'] = $posts;
658 - }
591 + public function get_uncategorised_faq() {
592 + $available_terms = array_map( function ( $term ) {
593 + return $term->term_id;
594 + }, get_terms( [
595 + 'taxonomy' => 'betterdocs_faq_category',
596 + 'hide_empty' => false
597 + ] ) );
659 598
660 - return $faq;
661 - }
599 + return get_posts( [
600 + 'post_type' => 'betterdocs_faq',
601 + 'post_status' => ['publish', 'draft'],
602 + 'posts_per_page' => -1,
603 + 'tax_query' => [
604 + 'relation' => 'AND',
605 + [
606 + 'taxonomy' => 'betterdocs_faq_category',
607 + 'field' => 'term_id',
608 + 'terms' => $available_terms,
609 + 'operator' => 'NOT IN'
610 + ]
611 + ]
612 + ] );
613 + }
662 614
663 - public function get_uncategorised_faq() {
664 - $available_terms = array_map(
665 - function ( $term ) {
666 - return $term->term_id;
667 - },
668 - get_terms(
669 - [
670 - 'taxonomy' => 'betterdocs_faq_category',
671 - 'hide_empty' => false
672 - ]
673 - )
674 - );
615 + public function category_search( $request ) {
675 616
676 - return get_posts(
677 - [
678 - 'post_type' => 'betterdocs_faq',
679 - 'post_status' => current_user_can( 'edit_others_posts' ) ? [ 'publish', 'draft' ] : 'publish',
680 - 'posts_per_page' => -1,
681 - 'tax_query' => [
682 - 'relation' => 'AND',
683 - [
684 - 'taxonomy' => 'betterdocs_faq_category',
685 - 'field' => 'term_id',
686 - 'terms' => $available_terms,
687 - 'operator' => 'NOT IN'
688 - ]
689 - ]
690 - ]
691 - );
692 - }
693 -
694 - public function category_search( $request ) {
695 -
696 617 $title = $request['title'];
697 618
698 619 // Perform the taxonomy search
699 - $taxonomy_args = [
620 + $taxonomy_args = array(
700 621 'name__like' => $title,
701 - 'taxonomy' => 'betterdocs_faq_category',
622 + 'taxonomy' => 'betterdocs_faq_category',
702 623 'hide_empty' => false
703 - ];
624 + );
704 625
705 - $taxonomies = get_terms( $taxonomy_args );
626 + $taxonomies = get_terms($taxonomy_args);
706 627
707 - if ( ! empty( $taxonomies ) ) {
708 - $result = [];
709 - foreach ( $taxonomies as $taxonomy ) {
710 - $result[] = [
711 - 'id' => $taxonomy->term_id,
712 - 'count' => $taxonomy->count,
628 + if (!empty($taxonomies)) {
629 + $result = array();
630 + foreach ($taxonomies as $taxonomy) {
631 + $result[] = array(
632 + 'id' => $taxonomy->term_id,
633 + 'count' => $taxonomy->count,
713 634 'description' => $taxonomy->description,
714 - 'name' => $taxonomy->name,
715 - 'slug' => $taxonomy->slug
635 + 'name' => $taxonomy->name,
636 + 'slug' => $taxonomy->slug
716 637 // Add more fields as needed
717 - ];
638 + );
718 639 }
719 640 // Return the taxonomy data
720 641 return $result;
721 642 } else {
722 643 // Taxonomy not found
723 - return new WP_Error( 'taxonomy_not_found', 'Taxonomy not found.', [ 'status' => 404 ] );
644 + return new WP_Error('taxonomy_not_found', 'Taxonomy not found.', array('status' => 404));
724 645 }
725 646 }
726 647
727 - public function faq_category_orderby_meta( $args, $request ) {
728 - if ( $args['taxonomy'] === 'betterdocs_faq_category' ) {
729 - $args['orderby'] = 'meta_value_num';
648 + public function faq_category_orderby_meta($args, $request) {
649 + if ($args['taxonomy'] === 'betterdocs_faq_category') {
650 + $args['orderby'] = 'meta_value_num';
730 651 $args['meta_key'] = 'order';
731 652 }
732 653 return $args;
733 654 }