PluginProbe ʕ •ᴥ•ʔ
The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid / 7.7.0
The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid v7.7.0
7.9.3 7.9.2 trunk 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.2.0 4.2.1 4.2.2 4.2.3 5.0.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 6.0.0 7.0.0 7.0.1 7.0.2 7.1.0 7.2.0 7.2.1 7.2.10 7.2.11 7.2.2 7.2.3 7.2.4 7.2.5 7.2.6 7.2.7 7.2.8 7.2.9 7.3.0 7.3.1 7.4.0 7.4.1 7.4.2 7.4.3 7.5.0 7.6.0 7.6.1 7.7.0 7.7.1 7.7.10 7.7.11 7.7.12 7.7.13 7.7.14 7.7.15 7.7.16 7.7.17 7.7.18 7.7.19 7.7.2 7.7.20 7.7.21 7.7.22 7.7.3 7.7.4 7.7.5 7.7.6 7.7.7 7.7.8 7.7.9 7.8.0 7.8.1 7.8.2 7.8.3 7.8.4 7.8.5 7.8.6 7.8.7 7.8.8 7.8.9 7.9.0 7.9.1
the-post-grid / app / Controllers / Api / GetPostsV1.php
the-post-grid / app / Controllers / Api Last commit date
ACFV1.php 2 years ago CountLayoutInstall.php 2 years ago ElImport.php 2 years ago FrontEndFilterV1.php 2 years ago GetBuilderData.php 2 years ago GetCategories.php 2 years ago GetPostsV1.php 2 years ago ImageSizeV1.php 2 years ago RestApi.php 2 years ago RttpgV1.php 2 years ago
GetPostsV1.php
371 lines
1 <?php
2
3 namespace RT\ThePostGrid\Controllers\Api;
4
5 use RT\ThePostGrid\Helpers\Fns;
6 use WP_Query;
7
8 class GetPostsV1 {
9 public function __construct() {
10 add_action( "rest_api_init", [ $this, 'register_post_route' ] );
11 }
12
13 public function register_post_route() {
14 register_rest_route( 'rttpg/v1', 'query', [
15 'methods' => 'POST',
16 'callback' => [ $this, 'get_all_posts' ],
17 'permission_callback' => function () {
18 return true;
19 }
20 ] );
21 }
22
23
24 public function get_all_posts( $data ) {
25
26 $prefix = isset( $data["prefix"] ) ? $data["prefix"] : 'grid';
27
28 $args = [
29 'post_type' => $data["post_type"],
30 'post_status' => 'publish',
31 ];
32
33 $excluded_ids = null;
34
35 if ( $data['post_id'] ) {
36 $post_ids = explode( ',', $data['post_id'] );
37 $post_ids = array_map( 'trim', $post_ids );
38
39 $args['post__in'] = $post_ids;
40
41 if ( $excluded_ids != null && is_array( $excluded_ids ) ) {
42 $args['post__in'] = array_diff( $post_ids, $excluded_ids );
43 }
44 }
45
46 if ( $prefix !== 'slider' && 'show' === $data['show_pagination'] ) {
47 $_paged = is_front_page() ? "page" : "paged";
48 $args['paged'] = get_query_var( $_paged ) ? absint( get_query_var( $_paged ) ) : absint( $data['page'] );
49 }
50
51 if ( rtTPG()->hasPro() && 'yes' == $data['ignore_sticky_posts'] ) {
52 $args['ignore_sticky_posts'] = 1;
53 }
54
55 if ( $orderby = $data['orderby'] ) {
56 if ( ! rtTPG()->hasPro() && 'rand' == $orderby ) {
57 $orderby = 'date';
58 }
59 $args['orderby'] = $orderby;
60 }
61
62 if ( $data['order'] ) {
63 $args['order'] = $data['order'];
64 }
65
66 if ( $data['instant_query'] ) {
67 $args = Fns::get_instant_query( $data['instant_query'], $args );
68 }
69
70 if ( $data['author'] ) {
71 $args['author__in'] = $data['author'];
72 }
73
74 if ( rtTPG()->hasPro() && ( $data['start_date'] || $data['end_date'] ) ) {
75 $args['date_query'] = [
76 [
77 'after' => trim( $data['start_date'] ),
78 'before' => trim( $data['end_date'] ),
79 'inclusive' => true,
80 ],
81 ];
82 }
83
84 //TODO: Taxonomy should implement after
85 $_taxonomies = get_object_taxonomies( $data['post_type'], 'objects' );
86 $_taxonomy_list = $data['taxonomy_lists'];
87 $filtered_taxonomy_lists = [];
88
89 foreach ( $_taxonomies as $index => $object ) {
90 if ( in_array( $object->name, Fns::get_excluded_taxonomy() ) ) {
91 continue;
92 }
93
94 $filtered_taxonomy_lists[ $object->name ] = isset( $_taxonomy_list[ $object->name ] ) ? $_taxonomy_list[ $object->name ]['options'] : null;
95 $_term_list = isset( $_taxonomy_list[ $object->name ] ) ? wp_list_pluck( $_taxonomy_list[ $object->name ]['options'], 'value' ) : null;
96 if ( ! empty( $_term_list ) ) {
97 //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
98 $args['tax_query'][] = [
99 'taxonomy' => $object->name,
100 'field' => 'term_id',
101 'terms' => $_term_list,
102 ];
103 }
104 if ( ! empty( $args['tax_query'] ) && $data['relation'] ) {
105 $args['tax_query']['relation'] = $data['relation']; //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
106 }
107 }
108
109 if ( $data['post_keyword'] ) {
110 $args['s'] = $data['post_keyword'];
111 }
112
113 $excluded_ids = [];
114 $offset_posts = [];
115 if ( $data['exclude'] || $data['offset'] ) {
116 if ( $data['exclude'] ) {
117 $excluded_ids = explode( ',', $data['exclude'] );
118 $excluded_ids = array_map( 'trim', $excluded_ids );
119 }
120
121 if ( $data['offset'] ) {
122 $_temp_args = $args;
123 unset( $_temp_args['paged'] );
124 $_temp_args['posts_per_page'] = $data['offset'];
125 $_temp_args['fields'] = 'ids';
126
127 $offset_posts = get_posts( $_temp_args );
128 }
129
130 $excluded_post_ids = array_merge( $offset_posts, $excluded_ids );
131 $args['post__not_in'] = array_unique( $excluded_post_ids ); //phpcs:ignore WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in
132 }
133
134 if ( $prefix !== 'slider' ) {
135 if ( $data['post_limit'] ) {
136 if ( 'show' !== $data['show_pagination'] ) {
137 $args['posts_per_page'] = $data['post_limit'];
138 } else {
139 $tempArgs = $args;
140 $tempArgs['posts_per_page'] = $data['post_limit'];
141 $tempArgs['paged'] = 1;
142 $tempArgs['fields'] = 'ids';
143 if ( ! empty( $offset_posts ) ) {
144 $tempArgs['post__not_in'] = $offset_posts; //phpcs:ignore WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in
145 }
146 $tempQ = new WP_Query( $tempArgs );
147 if ( ! empty( $tempQ->posts ) ) {
148 $args['post__in'] = $tempQ->posts;
149 $args['posts_per_page'] = $data['post_limit'];
150 }
151 }
152 } else {
153 $_posts_per_page = 9;
154 if ( 'grid' === $prefix ) {
155 if ( $data['grid_layout'] == 'grid-layout5' ) {
156 $_posts_per_page = 5;
157 } else if ( in_array( $data['grid_layout'], [ 'grid-layout6', 'grid-layout6-2' ] ) ) {
158 $_posts_per_page = 3;
159 } else if ( in_array( $data['grid_layout'], [ 'grid-layout5', 'grid-layout5-2' ] ) ) {
160 $_posts_per_page = 5;
161 }
162 } else if ( 'list' === $prefix ) {
163 if ( in_array( $data['list_layout'], [ 'list-layout2', 'list-layout2-2' ] ) ) {
164 $_posts_per_page = 7;
165 } else if ( in_array( $data['list_layout'], [ 'list-layout3', 'list-layout3-2' ] ) ) {
166 $_posts_per_page = 5;
167 }
168 } else if ( 'grid_hover' === $prefix ) {
169 if ( in_array( $data['grid_hover_layout'], [ 'grid_hover-layout4', 'grid_hover-layout4-2' ] ) ) {
170 $_posts_per_page = 7;
171 } else if ( in_array( $data['grid_hover_layout'], [
172 'grid_hover-layout5',
173 'grid_hover-layout5-2'
174 ] ) ) {
175 $_posts_per_page = 3;
176 } else if ( in_array( $data['grid_hover_layout'],
177 [
178 'grid_hover-layout6',
179 'grid_hover-layout6-2',
180 'grid_hover-layout9',
181 'grid_hover-layout9-2',
182 'grid_hover-layout10',
183 'grid_hover-layout11'
184 ] )
185 ) {
186 $_posts_per_page = 4;
187 } else if ( in_array( $data['grid_hover_layout'], [
188 'grid_hover-layout7',
189 'grid_hover-layout7-2',
190 'grid_hover-layout8'
191 ] ) ) {
192 $_posts_per_page = 5;
193 } else if ( in_array( $data['grid_hover_layout'], [
194 'grid_hover-layout6',
195 'grid_hover-layout6-2'
196 ] ) ) {
197 $_posts_per_page = 4;
198 }
199 }
200
201 $args['posts_per_page'] = $_posts_per_page;
202 }
203
204 if ( isset( $data['display_per_page'] ) && 'show' === $data['show_pagination'] && $data['display_per_page'] > 0 ) {
205 $args['posts_per_page'] = $data['display_per_page'];
206 }
207 } else {
208 $slider_per_page = $data['post_limit'];
209 if ( $data['slider_layout'] == 'slider-layout10' ) {
210 $slider_reminder = ( intval( $data['post_limit'], 10 ) % 5 );
211 if ( $slider_reminder ) {
212 $slider_per_page = ( $data['post_limit'] - $slider_reminder + 5 );
213 }
214 }
215 $args['posts_per_page'] = $slider_per_page;
216 }
217
218 $_all_taxs = wp_list_pluck( $_taxonomies, 'label', 'name' );
219
220 $post_tax_list = array_filter( $_all_taxs, function ( $item ) {
221 return ( ! in_array( $item, [
222 'post_format',
223 'elementor_library_type',
224 'product_visibility',
225 'product_shipping_class'
226 ], true ) );
227 }, ARRAY_FILTER_USE_KEY );
228
229 if ( ! empty( $data['is_builder'] ) && $data['is_builder'] === 'yes' ) {
230 $args['posts_per_page'] = get_option('posts_per_page');
231 }
232
233 $query = new WP_Query( $args );
234
235 $post_layout = $data[ $prefix . '_layout' ];
236
237 $send_data = [
238 'posts' => [],
239 'total_post' => $query->found_posts,
240 'query_args' => $args,
241 'query_info' => [
242 'prefix' => $prefix,
243 'layout' => $post_layout,
244 'taxonomy' => $post_tax_list
245 ]
246 ];
247
248 // $send_data['total_post'] = esc_html( $query->found_posts );
249 if ( $query->have_posts() ) {
250 $pCount = 1;
251 while ( $query->have_posts() ) {
252 $query->the_post();
253 $id = get_the_id();
254 $post_count = $query->post_count;
255 set_query_var( 'tpg_post_count', $pCount );
256 set_query_var( 'tpg_total_posts', $post_count );
257 global $post;
258
259 $cf_group = isset( $data['acf_data_lists'][ $data["post_type"] . '_cf_group' ] ) ? $data['acf_data_lists'][ $data["post_type"] . '_cf_group' ]['options'] : [];
260 $cf_group_collection = wp_list_pluck( $cf_group, 'value' );
261
262 $acfArgs = [
263 'is_guten' => 'yes',
264 'show_acf' => $data['show_acf'],
265 'cf_hide_empty_value' => $data['cf_hide_empty_value'],
266 'cf_show_only_value' => $data['cf_show_only_value'],
267 'cf_hide_group_title' => $data['cf_hide_group_title'],
268 'cf_group' => $cf_group_collection,
269 ];
270
271 $acf_data = Fns::tpg_get_acf_data_elementor( $acfArgs, $id, false );
272
273
274 //First image from the post
275 preg_match_all( '/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', get_the_content(), $matches );
276 if ( empty( $first_img ) ) { //Defines a default image
277 $first_img = RT_THE_POST_GRID_PLUGIN_PATH . "/images/default.png";
278 } else {
279 $first_img = $matches [1] [0];
280 }
281
282
283 $category_terms_list = get_the_terms( $id, $data['category_source'] ? $data['category_source'] : 'category' );
284 $tags_terms_list = get_the_terms( $id, $data['tag_source'] ? $data['tag_source'] : 'post_tag' );
285
286 $category_terms = wp_list_pluck( $category_terms_list, 'name' );
287 $tags_terms = wp_list_pluck( $tags_terms_list, 'name' );
288
289 //TODO: Working Here 13-12-22
290
291 $_cat_bg_meta = [];
292 if ( $data["post_type"] == 'post' ) {
293 $_category_list_term = wp_list_pluck( $category_terms_list, 'term_id' );
294 foreach ( $_category_list_term as $item_id ) {
295 $meta_color = get_term_meta( $item_id, 'rttpg_category_color', true );
296 $_cat_bg_meta[] = $meta_color ? "#{$meta_color}" : '';
297 }
298 }
299
300
301 $img_url = esc_url_raw( get_the_post_thumbnail_url( $id, $data['image_size'] ) );
302 $img_offset_url = '';
303 if ( isset( $data['image_offset_size'] ) && $data['image_offset_size'] ) {
304 $img_offset_url = esc_url_raw( get_the_post_thumbnail_url( $id, $data['image_offset_size'] ) );
305 }
306
307 if ( 'first_image' === $data['media_source'] ) {
308 $img_url = Fns::get_content_first_image( $id, 'url' );
309 }
310
311 if ( isset( $data['default_image']['id'] ) && ! $img_url ) {
312 $img_size_key = 'image_size';
313 $default_img_url = wp_get_attachment_image_src( $data['default_image']['id'], $data[ $img_size_key ] );
314 $img_url = $default_img_url[0];
315 }
316
317 $excerpt_args = [
318 'excerpt_type' => $data['excerpt_type'],
319 'excerpt_limit' => $data['excerpt_limit'],
320 'excerpt_more_text' => $data['excerpt_more_text'],
321 ];
322
323 $exerpt = Fns::get_the_excerpt( $id, $excerpt_args );
324
325 $author_id = get_the_author_meta( 'ID' );
326 $author_avatar_url = get_avatar_url( $author_id );
327
328 $count_key = Fns::get_post_view_count_meta_key();
329 $get_view_count = get_post_meta( $id, $count_key, true );
330
331 $send_data['posts'][] = [
332 "author_name" => esc_html( get_the_author_meta( 'display_name', $author_id ) ),
333 "avatar_url" => esc_url( $author_avatar_url ),
334 "comment_count" => esc_html( get_comments_number( $id ) ),
335 "content" => get_the_content(),
336 "category" => ! empty( $category_terms ) ? $category_terms : [],
337 "category_bg" => ! empty( $_cat_bg_meta ) ? $_cat_bg_meta : [],
338 "tags" => ! empty( $tags_terms ) ? $tags_terms : '',
339 "excerpt" => $exerpt,
340 "id" => $id,
341 "image_url" => $img_url,
342 "thumb_url" => get_the_post_thumbnail_url( $id, 'thumbnail' ),
343 "offset_image_url" => $img_offset_url,
344 "post_date" => esc_html( get_the_date() ),
345 "post_link" => get_the_permalink(),
346 "post_type" => $data["post_type"],
347 "prefix" => $prefix,
348 "post_count" => esc_html( $get_view_count ),
349 "title" => Fns::get_the_title( $id, $data ), //wp_kses( $post->post_title, Fns::allowedHtml() ),
350 'taxonomy_lists' => $filtered_taxonomy_lists,
351 "post_class" => join( ' ', get_post_class( null, $id ) ),
352 "layout_style" => $data['layout_style'],
353 "hover_animation" => $data['hover_animation'],
354 'acf_data' => $acf_data,
355 'tpg_post_count' => $pCount,
356 'tpg_total_posts' => $post_count
357 ];
358
359 $pCount ++;
360 }
361 } else {
362 $send_data['message'] = $data['no_posts_found_text'] ?? __( "No posts found", "the-post-grid" );
363 $send_data['args'] = $args;
364 }
365
366 wp_reset_postdata();
367
368 return rest_ensure_response( $send_data );
369 }
370 }
371