PluginProbe
Post Grid Gutenberg Blocks – PostX / 2.8.4
Post Grid Gutenberg Blocks – PostX v2.8.4
5.0.39 5.0.38 5.0.37 5.0.36 5.0.35 5.0.34 5.0.33 5.0.32 5.0.31 5.0.30 5.0.29 5.0.28 5.0.27 5.0.26 5.0.25 5.0.23 5.0.24 5.0.22 5.0.21 5.0.20 5.0.19 5.0.18 5.0.17 2.1.1 2.1.2 All 237 releases
ultimate-post / classes / REST_API.php

REST_API.php in Post Grid Gutenberg Blocks – PostX 2.8.4, at classes/REST_API.php

366 lines 13.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * REST API Action.
4 *
5 * @package ULTP\REST_API
6 * @since v.1.0.0
7 */
8 namespace ULTP;
9
10 defined('ABSPATH') || exit;
11
12 /**
13 * Styles class.
14 */
15 class REST_API{
16
17 /**
18 * Setup class.
19 *
20 * @since v.1.0.0
21 */
22 public function __construct() {
23 add_action( 'rest_api_init', array($this, 'ultp_register_route') );
24 }
25
26
27 /**
28 * REST API Action
29 *
30 * @since v.1.0.0
31 * @return NULL
32 */
33 public function ultp_register_route() {
34 register_rest_route( 'ultp', 'posts', array(
35 'args' => array(),
36 'callback' => array($this,'ultp_route_post_data'),
37 'permission_callback' => '__return_true'
38 )
39 );
40 register_rest_route( 'ultp', 'common', array(
41 'methods' => \WP_REST_Server::READABLE,
42 'args' => array('wpnonce' => []),
43 'callback' => array($this,'ultp_route_common_data'),
44 'permission_callback' => '__return_true'
45 )
46 );
47 register_rest_route( 'ultp', 'specific_taxonomy', array(
48 'methods' => \WP_REST_Server::READABLE,
49 'args' => array('taxType' => [], 'taxSlug' => [], 'taxValue' => [], 'queryNumber' => [], 'wpnonce' => []),
50 'callback' => array($this,'ultp_route_taxonomy_info_data'),
51 'permission_callback' => '__return_true'
52 )
53 );
54 register_rest_route(
55 'ultp/v1',
56 '/search/',
57 array(
58 array(
59 'methods' => 'POST',
60 'callback' => array($this, 'search_settings_action'),
61 'permission_callback' => function () {
62 return current_user_can('edit_posts');
63 },
64 'args' => array()
65 )
66 )
67 );
68 register_rest_route(
69 'ultp/v2',
70 '/template_page_insert/',
71 array(
72 array(
73 'methods' => 'POST',
74 'callback' => array($this, 'template_page_insert'),
75 'permission_callback' => function () {
76 return current_user_can('edit_posts');
77 },
78 'args' => array()
79 )
80 )
81 );
82 }
83
84 /**
85 * Insert Post For Imported Template
86 *
87 * @since v.2.6.7
88 * @param STRING
89 * @return ARRAY | Inserted Post Url
90 */
91 public function template_page_insert($server) {
92 $post = $server->get_params();
93 $new_page = array(
94 'post_title' => $post['title'],
95 'post_type' => 'page',
96 'post_content' => $post['blockCode'],
97 'post_status' => 'draft',
98 );
99 $post_id = wp_insert_post( $new_page );
100 return array( 'success' => true, 'link' => get_edit_post_link($post_id));
101 }
102
103
104 public function search_settings_action($server) {
105 global $wpdb;
106 $post = $server->get_params();
107
108 switch ($post['type']) {
109 case 'posts':
110 case 'allpost':
111 case 'postExclude':
112 $post_type = array('post');
113 if ($post['type'] == 'allpost') {
114 $post_type = array_keys(ultimate_post()->get_post_type());
115 } else if ($post['type'] == 'postExclude') {
116 $post_type = array($post['condition']);
117 }
118 $args = array(
119 'post_type' => $post_type,
120 'post_status' => 'publish',
121 'posts_per_page' => 10,
122 );
123 if (is_numeric($post['term'])) {
124 $args['p'] = $post['term'];
125 } else {
126 $args['s'] = $post['term'];
127 }
128
129 $post_results = new \WP_Query($args);
130 $data = [];
131 if (!empty($post_results)) {
132 while ( $post_results->have_posts() ) {
133 $post_results->the_post();
134 $id = get_the_ID();
135 $title = html_entity_decode(get_the_title());
136 $data[] = array('value'=>$id, 'title'=>($title?'[ID: '.$id.'] '.$title:('[ID: '.$id.']')));
137 }
138 wp_reset_postdata();
139 }
140 return ['success' => true, 'data' => $data];
141 break;
142
143 case 'author':
144 $term = '%'. $wpdb->esc_like( $post['term'] ) .'%';
145 $post_results = $wpdb->get_results(
146 $wpdb->prepare(
147 "SELECT ID, display_name
148 FROM $wpdb->users
149 WHERE user_login LIKE '%s' OR ID LIKE '%s' OR user_nicename LIKE '%s' OR user_email LIKE '%s' OR display_name LIKE '%s' LIMIT 10", $term, $term, $term, $term, $term
150 )
151 );
152 $data = [];
153 if (!empty($post_results)) {
154 foreach ($post_results as $key => $val) {
155 $data[] = array('value'=>$val->ID, 'title'=>'[ID: '.$val->ID.'] '.$val->display_name);
156 }
157 }
158 return ['success' => true, 'data' => $data];
159 break;
160
161 case 'taxvalue':
162 $split = explode('###', $post['condition']);
163 $condition = $split[1] != 'multiTaxonomy' ? array($split[1]) : get_object_taxonomies($split[0]);
164 $args = array(
165 'taxonomy' => $condition,
166 'fields' => 'all',
167 'orderby' => 'id',
168 'order' => 'ASC',
169 'name__like'=> $post['term']
170 );
171 if (is_numeric($post['term'])) {
172 unset($args['name__like']);
173 $args['include'] = array($post['term']);
174 }
175
176 $post_results = get_terms( $args );
177 $data = [];
178 if (!empty($post_results)) {
179 foreach ($post_results as $key => $val) {
180 if ($split[1] == 'multiTaxonomy') {
181 $data[] = array('value'=>$val->taxonomy.'###'.$val->slug, 'title'=> '[ID: '.$val->term_id.'] '.$val->taxonomy.': '.$val->name);
182 } else {
183 $data[] = array('value'=>$val->slug, 'title'=>'[ID: '.$val->term_id.'] '.$val->name);
184 }
185 }
186 }
187 return ['success' => true, 'data' => $data];
188 break;
189
190 case 'taxExclude':
191 $condition = get_object_taxonomies($post['condition']);
192 $args = array(
193 'taxonomy' => $condition,
194 'fields' => 'all',
195 'orderby' => 'id',
196 'order' => 'ASC',
197 'name__like'=> $post['term']
198 );
199 if (is_numeric($post['term'])) {
200 unset($args['name__like']);
201 $args['include'] = array($post['term']);
202 }
203 $post_results = get_terms( $args );
204 $data = [];
205 if (!empty($post_results)) {
206 foreach ($post_results as $key => $val) {
207 $data[] = array('value'=>$val->taxonomy.'###'.$val->slug, 'title'=> '[ID: '.$val->term_id.'] '.$val->taxonomy.': '.$val->name);
208 }
209 }
210 return ['success' => true, 'data' => $data];
211 break;
212
213
214 default:
215 return ['success' => true, 'data' => [['value'=>'', 'title'=>'- Select -']]];
216 break;
217 }
218 }
219
220 /**
221 * Post Data Response of REST API
222 *
223 * @since v.1.0.0
224 * @param MIXED | Pram (ARRAY), Local (BOOLEAN)
225 * @return ARRAY | Response Image Size as Array
226 */
227 public function ultp_route_post_data($prams,$local=false) {
228 if (!wp_verify_nonce(wp_unslash($_REQUEST['wpnonce']), 'ultp-nonce') && $local){
229 return ;
230 }
231 $prams = $prams->get_params();
232 $data = [];
233 $loop = new \WP_Query( ultimate_post()->get_query($prams) );
234 $max_tax = apply_filters( 'postx_loop_maximum_taxonomy', 20 );
235
236 if ($loop->have_posts()) {
237 while($loop->have_posts()) {
238 $loop->the_post();
239 $var = array();
240 $post_id = get_the_ID();
241 $user_id = get_the_author_meta('ID');
242 $content_data = get_the_content();
243 $var['ID'] = $post_id;
244 $var['title'] = get_the_title();
245 $var['permalink'] = get_permalink();
246 $var['seo_meta'] = ultimate_post()->get_excerpt($post_id, 1);
247 $var['excerpt'] = strip_tags($content_data);
248 $var['excerpt_full']= strip_tags(get_the_excerpt());
249 $var['time'] = (int)get_the_date('U')*1000;
250 $var['timeModified']= (int)get_the_modified_date('U')*1000;
251 $var['post_time'] = human_time_diff(get_the_time('U'),current_time('U'));
252 $var['view'] = get_post_meta(get_the_ID(),'__post_views_count', true);
253 $var['comments'] = get_comments_number();
254 $var['author_link'] = get_author_posts_url($user_id);
255 $var['avatar_url'] = get_avatar_url($user_id);
256 $var['display_name']= get_the_author_meta('display_name');
257 $var['reading_time']= ceil(strlen($content_data)/1200);
258 $post_video = get_post_meta($post_id, '__builder_feature_video', true);
259 // Video
260 if($post_video){
261 $var['has_video'] = true;
262 }
263 // image
264 $image_sizes = ultimate_post()->get_image_size();
265 $image_src = array();
266 if (has_post_thumbnail()) {
267 $thumb_id = get_post_thumbnail_id($post_id);
268 foreach ($image_sizes as $key => $value) {
269 $image_src[$key] = wp_get_attachment_image_src($thumb_id, $key, false)[0];
270 }
271 $var['image'] = $image_src;
272 } elseif(isset($prams['fallbackImg']['id'])) {
273 foreach ($image_sizes as $key => $value) {
274 $image_src[$key] = wp_get_attachment_image_src($prams['fallbackImg']['id'], $key, false)[0];
275 }
276 $var['image'] = $image_src;
277 $var['is_fallback'] = true;
278 }
279
280 // tag
281 $tag = get_the_terms($post_id, (isset($prams['tag'])?esc_attr($prams['tag']):'post_tag'));
282 if (!empty($tag)) {
283 $v = array();
284 foreach ($tag as $k => $val) {
285 if ($k >= $max_tax) { break; }
286 $v[] = array('slug' => $val->slug, 'name' => $val->name, 'url' => get_term_link($val->term_id));
287 }
288 $var['tag'] = $v;
289 }
290
291 // Taxonomy
292 $cat = get_the_terms($post_id, (isset($prams['taxonomy'])?esc_attr($prams['taxonomy']):'category'));
293
294 if(!empty($cat)){
295 $v = array();
296 foreach ($cat as $k => $val) {
297 if ($k >= $max_tax) { break; }
298 $v[] = array('slug' => $val->slug, 'name' => $val->name, 'url' => get_term_link($val->term_id), 'color' => get_term_meta($val->term_id, 'ultp_category_color', true));
299 }
300 $var['category'] = $v;
301 }
302 $data[] = $var;
303 }
304 wp_reset_postdata();
305 }
306 return rest_ensure_response( $data);
307 }
308
309
310 /**
311 * Taxonomy Data Response of REST API
312 *
313 * @since v.1.0.0
314 * @param ARRAY | Parameter (ARRAY)
315 * @return ARRAY | Response Taxonomy List as Array
316 */
317 public function ultp_route_common_data($prams) {
318 if (!wp_verify_nonce(wp_unslash($_REQUEST['wpnonce']), 'ultp-nonce')){
319 return rest_ensure_response([]);
320 }
321
322 $all_post_type = ultimate_post()->get_post_type();
323 $data = array();
324 foreach ($all_post_type as $post_type_slug => $post_type ) {
325 $data_term = array();
326 $taxonomies = get_object_taxonomies($post_type_slug);
327 foreach ($taxonomies as $key => $taxonomy_slug) {
328 $taxonomy_value = get_terms(array(
329 'taxonomy' => $taxonomy_slug,
330 'hide_empty' => false
331 ));
332 if (!is_wp_error($taxonomy_value)) {
333 $data_tax = array();
334 foreach ($taxonomy_value as $k => $taxonomy) {
335 $data_tax[urldecode_deep($taxonomy->slug)] = $taxonomy->name;
336 }
337 if (count($data_tax) > 0) {
338 $data_term[$taxonomy_slug] = $data_tax;
339 }
340 }
341 }
342 $data[$post_type_slug] = $data_term;
343 }
344 // Global Customizer
345 $global = get_option('postx_global', []);
346 // Image Size
347 $image_sizes = ultimate_post()->get_image_size();
348
349 return rest_ensure_response(['taxonomy' => $data, 'global' => $global, 'image' => json_encode($image_sizes), 'posttype' => json_encode($all_post_type)]);
350 }
351
352 /**
353 * Specific Taxonomy Data Response of REST API
354 *
355 * @since v.1.0.0
356 * @param ARRAY | Parameter (ARRAY)
357 * @return ARRAY | Response Taxonomy List as Array
358 */
359 public function ultp_route_taxonomy_info_data($prams) {
360 if (!wp_verify_nonce(wp_unslash($_REQUEST['wpnonce']), 'ultp-nonce')) {
361 return rest_ensure_response([]);
362 }
363
364 return rest_ensure_response( ultimate_post()->get_category_data(json_decode($prams['taxValue']), $prams['queryNumber'], $prams['taxType'], $prams['taxSlug']) );
365 }
366 }