PluginProbe ʕ •ᴥ•ʔ
The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid / 7.0.2
The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid v7.0.2
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 3 years ago CountLayoutInstall.php 3 years ago ElImport.php 3 years ago FrontEndFilterV1.php 3 years ago GetPostsV1.php 3 years ago ImageSizeV1.php 3 years ago RestApi.php 3 years ago RttpgV1.php 3 years ago
GetPostsV1.php
364 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['author'] ) {
67 $args['author__in'] = $data['author'];
68 }
69
70 if ( rtTPG()->hasPro() && ( $data['start_date'] || $data['end_date'] ) ) {
71 $args['date_query'] = [
72 [
73 'after' => trim( $data['start_date'] ),
74 'before' => trim( $data['end_date'] ),
75 'inclusive' => true,
76 ],
77 ];
78 }
79
80
81 //TODO: Taxonomy should implement after
82 $_taxonomies = get_object_taxonomies( $data['post_type'], 'objects' );
83 $_taxonomy_list = $data['taxonomy_lists'];
84 $filtered_taxonomy_lists = [];
85
86 foreach ( $_taxonomies as $index => $object ) {
87 if ( in_array( $object->name, Fns::get_excluded_taxonomy() ) ) {
88 continue;
89 }
90
91 $filtered_taxonomy_lists[ $object->name ] = isset( $_taxonomy_list[ $object->name ] ) ? $_taxonomy_list[ $object->name ]['options'] : null;
92 $_term_list = isset( $_taxonomy_list[ $object->name ] ) ? wp_list_pluck( $_taxonomy_list[ $object->name ]['options'], 'value' ) : null;
93 if ( ! empty( $_term_list ) ) {
94 $args['tax_query'][] = [
95 'taxonomy' => $object->name,
96 'field' => 'term_id',
97 'terms' => $_term_list,
98 ];
99 }
100 if ( ! empty( $args['tax_query'] ) && $data['relation'] ) {
101 $args['tax_query']['relation'] = $data['relation'];
102 }
103 }
104
105 if ( $data['post_keyword'] ) {
106 $args['s'] = $data['post_keyword'];
107 }
108
109 $excluded_ids = [];
110 $offset_posts = [];
111 if ( $data['exclude'] || $data['offset'] ) {
112 if ( $data['exclude'] ) {
113 $excluded_ids = explode( ',', $data['exclude'] );
114 $excluded_ids = array_map( 'trim', $excluded_ids );
115 }
116
117 if ( $data['offset'] ) {
118 $_temp_args = $args;
119 unset( $_temp_args['paged'] );
120 $_temp_args['posts_per_page'] = $data['offset'];
121 $_temp_args['fields'] = 'ids';
122
123 $offset_posts = get_posts( $_temp_args );
124 }
125
126 $excluded_post_ids = array_merge( $offset_posts, $excluded_ids );
127 $args['post__not_in'] = array_unique( $excluded_post_ids );
128 }
129
130 if ( $prefix !== 'slider' ) {
131 if ( $data['post_limit'] ) {
132 if ( 'show' !== $data['show_pagination'] ) {
133 $args['posts_per_page'] = $data['post_limit'];
134 } else {
135 $tempArgs = $args;
136 $tempArgs['posts_per_page'] = $data['post_limit'];
137 $tempArgs['paged'] = 1;
138 $tempArgs['fields'] = 'ids';
139 if ( ! empty( $offset_posts ) ) {
140 $tempArgs['post__not_in'] = $offset_posts;
141 }
142 $tempQ = new WP_Query( $tempArgs );
143 if ( ! empty( $tempQ->posts ) ) {
144 $args['post__in'] = $tempQ->posts;
145 $args['posts_per_page'] = $data['post_limit'];
146 }
147 }
148 } else {
149 $_posts_per_page = 9;
150 if ( 'grid' === $prefix ) {
151 if ( $data['grid_layout'] == 'grid-layout5' ) {
152 $_posts_per_page = 5;
153 } else if ( in_array( $data['grid_layout'], [ 'grid-layout6', 'grid-layout6-2' ] ) ) {
154 $_posts_per_page = 3;
155 } else if ( in_array( $data['grid_layout'], [ 'grid-layout5', 'grid-layout5-2' ] ) ) {
156 $_posts_per_page = 5;
157 }
158 } else if ( 'list' === $prefix ) {
159 if ( in_array( $data['list_layout'], [ 'list-layout2', 'list-layout2-2' ] ) ) {
160 $_posts_per_page = 7;
161 } else if ( in_array( $data['list_layout'], [ 'list-layout3', 'list-layout3-2' ] ) ) {
162 $_posts_per_page = 5;
163 }
164 } else if ( 'grid_hover' === $prefix ) {
165 if ( in_array( $data['grid_hover_layout'], [ 'grid_hover-layout4', 'grid_hover-layout4-2' ] ) ) {
166 $_posts_per_page = 7;
167 } else if ( in_array( $data['grid_hover_layout'], [
168 'grid_hover-layout5',
169 'grid_hover-layout5-2'
170 ] ) ) {
171 $_posts_per_page = 3;
172 } else if ( in_array( $data['grid_hover_layout'],
173 [
174 'grid_hover-layout6',
175 'grid_hover-layout6-2',
176 'grid_hover-layout9',
177 'grid_hover-layout9-2',
178 'grid_hover-layout10',
179 'grid_hover-layout11'
180 ] )
181 ) {
182 $_posts_per_page = 4;
183 } else if ( in_array( $data['grid_hover_layout'], [
184 'grid_hover-layout7',
185 'grid_hover-layout7-2',
186 'grid_hover-layout8'
187 ] ) ) {
188 $_posts_per_page = 5;
189 } else if ( in_array( $data['grid_hover_layout'], [
190 'grid_hover-layout6',
191 'grid_hover-layout6-2'
192 ] ) ) {
193 $_posts_per_page = 4;
194 }
195 }
196
197 $args['posts_per_page'] = $_posts_per_page;
198 }
199
200 if ( isset( $data['display_per_page'] ) && 'show' === $data['show_pagination'] && $data['display_per_page'] > 0 ) {
201 $args['posts_per_page'] = $data['display_per_page'];
202 }
203 } else {
204 $slider_per_page = $data['post_limit'];
205 if ( $data['slider_layout'] == 'slider-layout10' ) {
206 $slider_reminder = ( intval( $data['post_limit'], 10 ) % 5 );
207 if ( $slider_reminder ) {
208 $slider_per_page = ( $data['post_limit'] - $slider_reminder + 5 );
209 }
210 }
211 $args['posts_per_page'] = $slider_per_page;
212 }
213
214 $_all_taxs = wp_list_pluck( $_taxonomies, 'label', 'name' );
215
216 $post_tax_list = array_filter( $_all_taxs, function ( $item ) {
217 return ( ! in_array( $item, [
218 'post_format',
219 'elementor_library_type',
220 'product_visibility',
221 'product_shipping_class'
222 ], true ) );
223 }, ARRAY_FILTER_USE_KEY );
224
225
226 $query = new WP_Query( $args );
227
228 $post_layout = $data[ $prefix . '_layout' ];
229
230 $send_data = [
231 'posts' => [],
232 'total_post' => $query->found_posts,
233 'query_args' => $args,
234 'query_info' => [
235 'prefix' => $prefix,
236 'layout' => $post_layout,
237 'taxonomy' => $post_tax_list
238 ]
239 ];
240
241 // $send_data['total_post'] = esc_html( $query->found_posts );
242 if ( $query->have_posts() ) {
243 $pCount = 1;
244 while ( $query->have_posts() ) {
245 $query->the_post();
246 $id = get_the_id();
247 $post_count = $query->post_count;
248 set_query_var( 'tpg_post_count', $pCount );
249 set_query_var( 'tpg_total_posts', $post_count );
250 global $post;
251
252 $cf_group = isset( $data['acf_data_lists'][ $data["post_type"] . '_cf_group' ] ) ? $data['acf_data_lists'][ $data["post_type"] . '_cf_group' ]['options'] : [];
253 $cf_group_collection = wp_list_pluck( $cf_group, 'value' );
254
255 $acfArgs = [
256 'is_guten' => 'yes',
257 'show_acf' => $data['show_acf'],
258 'cf_hide_empty_value' => $data['cf_hide_empty_value'],
259 'cf_show_only_value' => $data['cf_show_only_value'],
260 'cf_hide_group_title' => $data['cf_hide_group_title'],
261 'cf_group' => $cf_group_collection,
262 ];
263
264 $acf_data = Fns::tpg_get_acf_data_elementor( $acfArgs, $id, false );
265
266
267 //First image from the post
268 preg_match_all( '/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', get_the_content(), $matches );
269 if ( empty( $first_img ) ) { //Defines a default image
270 $first_img = RT_THE_POST_GRID_PLUGIN_PATH . "/images/default.png";
271 } else {
272 $first_img = $matches [1] [0];
273 }
274
275
276 $category_terms_list = get_the_terms( $id, $data['category_source'] ? $data['category_source'] : 'category' );
277 $tags_terms_list = get_the_terms( $id, $data['tag_source'] ? $data['tag_source'] : 'post_tag' );
278
279 $category_terms = wp_list_pluck( $category_terms_list, 'name' );
280 $tags_terms = wp_list_pluck( $tags_terms_list, 'name' );
281
282 //TODO: Working Here 13-12-22
283
284 $_cat_bg_meta = [];
285 if ( $data["post_type"] == 'post' ) {
286 $_category_list_term = wp_list_pluck( $category_terms_list, 'term_id' );
287 foreach ( $_category_list_term as $item_id ) {
288 $meta_color = get_term_meta( $item_id, 'rttpg_category_color', true );
289 $_cat_bg_meta[] = $meta_color ? "#{$meta_color}" : '';
290 }
291 }
292
293
294 $img_url = esc_url_raw( get_the_post_thumbnail_url( $id, $data['image_size'] ) );
295 $img_offset_url = '';
296 if ( isset( $data['image_offset_size'] ) && $data['image_offset_size'] ) {
297 $img_offset_url = esc_url_raw( get_the_post_thumbnail_url( $id, $data['image_offset_size'] ) );
298 }
299
300 if ( 'first_image' === $data['media_source'] ) {
301 $img_url = Fns::get_content_first_image( $id, 'url' );
302 }
303
304 if ( isset( $data['default_image']['id'] ) && ! $img_url ) {
305 $img_size_key = 'image_size';
306 $default_img_url = wp_get_attachment_image_src( $data['default_image']['id'], $data[ $img_size_key ] );
307 $img_url = $default_img_url[0];
308 }
309
310 $excerpt_args = [
311 'excerpt_type' => $data['excerpt_type'],
312 'excerpt_limit' => $data['excerpt_limit'],
313 'excerpt_more_text' => $data['excerpt_more_text'],
314 ];
315
316 $exerpt = Fns::get_the_excerpt( $id, $excerpt_args );
317
318 $author_id = get_the_author_meta( 'ID' );
319 $author_avatar_url = get_avatar_url( $author_id );
320
321 $count_key = Fns::get_post_view_count_meta_key();
322 $get_view_count = get_post_meta( $id, $count_key, true );
323
324 $send_data['posts'][] = [
325 "author_name" => esc_html( get_the_author_meta( 'display_name', $author_id ) ),
326 "avatar_url" => esc_url( $author_avatar_url ),
327 "comment_count" => esc_html( get_comments_number( $id ) ),
328 "content" => get_the_content(),
329 "category" => ! empty( $category_terms ) ? $category_terms : [],
330 "category_bg" => ! empty( $_cat_bg_meta ) ? $_cat_bg_meta : [],
331 "tags" => ! empty( $tags_terms ) ? $tags_terms : '',
332 "excerpt" => $exerpt,
333 "id" => $id,
334 "image_url" => $img_url,
335 "thumb_url" => get_the_post_thumbnail_url( $id, 'thumbnail' ),
336 "offset_image_url" => $img_offset_url,
337 "post_date" => esc_html( get_the_date() ),
338 "post_link" => get_the_permalink(),
339 "post_type" => $data["post_type"],
340 "prefix" => $prefix,
341 "post_count" => esc_html( $get_view_count ),
342 "title" => wp_kses( $post->post_title, Fns::allowedHtml() ),
343 'taxonomy_lists' => $filtered_taxonomy_lists,
344 "post_class" => join( ' ', get_post_class( null, $id ) ),
345 "layout_style" => $data['layout_style'],
346 "hover_animation" => $data['hover_animation'],
347 'acf_data' => $acf_data,
348 'tpg_post_count' => $pCount,
349 'tpg_total_posts' => $post_count
350 ];
351
352 $pCount ++;
353 }
354 } else {
355 $send_data['message'] = $data['no_posts_found_text'] ? $data['no_posts_found_text'] : __( "No posts found", "the-post-grid" );
356 $send_data['args'] = $args;
357 }
358
359 wp_reset_postdata();
360
361 return rest_ensure_response( $send_data );
362 }
363 }
364