PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 3.8.1
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v3.8.1
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 / REST / DocCategories.php

DocCategories.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 3.8.1, at includes/REST/DocCategories.php

150 lines 5.2 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\REST;
4
5 use WPDeveloper\BetterDocs\Core\BaseAPI;
6
7 class DocCategories extends BaseAPI {
8 public function permission_check(): bool {
9 return current_user_can( 'edit_docs' );
10 }
11
12 public function register() {
13 $this->get( 'doc-categories', [$this, 'get_response'] );
14 }
15
16 public function get_response($request) {
17 global $wpdb;
18
19 $mkb = $request->get_param('knowledge_base');
20
21 $terms_query = betterdocs()->query->terms_query( [
22 'hide_empty' => false,
23 'taxonomy' => 'doc_category',
24 'orderby' => 'meta_value_num',
25 'meta_key' => 'doc_category_order',
26 'order' => 'ASC'
27 ] );
28
29 if( ! empty( $mkb ) ) {
30 $terms_query['meta_query'] = [
31 'relation' => 'AND',
32 [
33 'key' => 'doc_category_knowledge_base',
34 'value' => $mkb,
35 'compare' => 'LIKE'
36 ]
37 ];
38 $terms_query['order'] = 'ASC';
39 }
40
41 $terms = get_terms( $terms_query );
42 $response = [];
43
44 foreach ( $terms as $term ) {
45 $original_args = [
46 'post_type' => 'docs',
47 'posts_per_page' => '-1',
48 'post_status' => 'any',
49 'term_id' => $term->term_id,
50 'term_slug' => $term->slug,
51 'nested_subcategory' => false,
52 'orderby' => 'betterdocs_order'
53 ];
54
55 if( ! empty( $mkb ) ) {
56 $original_args['multiple_kb'] = true;
57 $original_args['kb_slug'] = $mkb;
58 }
59
60 $query_args = betterdocs()->query->docs_query_args($original_args);
61
62 $posts = betterdocs()->query->get_posts( $query_args, true );
63 $response[$term->term_id] = [];
64
65 if ( ! $posts->have_posts() ) {
66 wp_reset_query();
67 }
68 while ( $posts->have_posts() ):
69 $posts->the_post();
70 $data = $this->get_doc_data( get_the_ID() );
71 array_push( $response[$term->term_id], $data );
72 endwhile;
73
74 wp_reset_postdata();
75 wp_reset_query();
76 }
77
78 /**
79 * Uncategories Docs
80 */
81 $_post__not_in_query = $wpdb->prepare(
82 "SELECT ID as post_id from $wpdb->posts WHERE post_type = %s AND post_status != 'trash' AND post_status != 'auto-draft' AND ID NOT IN ( SELECT object_id as post_id FROM $wpdb->term_relationships WHERE term_taxonomy_id IN ( SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE taxonomy = %s ) )",
83 'docs',
84 'doc_category'
85 );
86
87 $_post__not_in = $wpdb->get_col( $_post__not_in_query );
88
89 if ( ! empty( $_post__not_in ) ) {
90 $uncategorized_docs = [];
91 $_uncategorized_docs_query = new \WP_Query( [
92 'post_type' => 'docs',
93 'post_status' => 'any',
94 'post__in' => $_post__not_in
95 ] );
96
97 if ( ! $_uncategorized_docs_query->have_posts() ) {
98 wp_reset_query();
99 }
100 while ( $_uncategorized_docs_query->have_posts() ):
101 $_uncategorized_docs_query->the_post();
102 $data = $this->get_doc_data( get_the_ID() );
103 array_push( $uncategorized_docs, $data );
104 endwhile;
105
106 wp_reset_postdata();
107 wp_reset_query();
108
109 $response['uncategorized'] = $uncategorized_docs;
110 }
111
112 return $response;
113 }
114
115 /**
116 * Get Doc Data Based On Doc ID
117 *
118 * @return void
119 */
120 public function get_doc_data( $id ) {
121 $post_data = get_post( $id );
122 $data = [
123 'author' => (int) $post_data->post_author,
124 'author_info' => [
125 'name' => get_the_author_meta( 'display_name', $post_data->post_author ),
126 'author_nicename' => get_the_author_meta( 'nicename', $post_data->post_author ),
127 'author_url' => get_author_posts_url( $post_data->post_author )
128 ],
129 'unique_id' => uniqid( 'doc' ),
130 'id' => $post_data->ID,
131 'title' => $post_data->post_title,
132 'slug' => get_post_field( 'post_name', $id ),
133 'link' => get_permalink( $id ),
134 'status' => get_post_status(),
135 'date' => $post_data->post_date,
136 'date_gmt' => $post_data->post_date_gmt,
137 'doc_category' => wp_get_post_terms( $id, 'doc_category', ["fields" => "ids"] ),
138 'doc_tag' => wp_get_post_terms( $id, 'doc_tag', ["fields" => "ids"] ),
139 'password' => $post_data->post_password,
140 'comment_status' => $post_data->comment_status
141 ];
142
143 if ( taxonomy_exists( 'knowledge_base' ) ) {
144 $data['knowledge_base'] = wp_get_post_terms( $id, 'knowledge_base', ["fields" => "ids"] );
145 }
146
147 return $data;
148 }
149 }
150