PluginProbe ʕ •ᴥ•ʔ
The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid / 5.0.3
The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid v5.0.3
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 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
357 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 {
10 public function __construct()
11 {
12 add_action("rest_api_init", [$this, 'register_post_route']);
13 }
14
15 public function register_post_route()
16 {
17 register_rest_route('rttpg/v1', 'query', [
18 'methods' => 'POST',
19 'callback' => [$this, 'get_all_posts'],
20 'permission_callback' => function () {
21 return true;
22 }
23 ]);
24 }
25
26
27 public function get_all_posts($data)
28 {
29
30 $prefix = isset($data["prefix"]) ? $data["prefix"] : 'grid';
31
32 $args = [
33 'post_type' => $data["post_type"],
34 'post_status' => 'publish',
35 ];
36
37 $excluded_ids = null;
38
39 if ($data['post_id']) {
40 $post_ids = explode(',', $data['post_id']);
41 $post_ids = array_map('trim', $post_ids);
42
43 $args['post__in'] = $post_ids;
44
45 if ($excluded_ids != null && is_array($excluded_ids)) {
46 $args['post__in'] = array_diff($post_ids, $excluded_ids);
47 }
48 }
49
50 if ($prefix !== 'slider' && 'show' === $data['show_pagination']) {
51 $_paged = is_front_page() ? "page" : "paged";
52 $args['paged'] = get_query_var($_paged) ? absint(get_query_var($_paged)) : absint($data['page']);
53 }
54
55 if (rtTPG()->hasPro() && 'yes' == $data['ignore_sticky_posts']) {
56 $args['ignore_sticky_posts'] = 1;
57 }
58
59 if ($orderby = $data['orderby']) {
60 if (!rtTPG()->hasPro() && 'rand' == $orderby) {
61 $orderby = 'date';
62 }
63 $args['orderby'] = $orderby;
64 }
65
66 if ($data['order']) {
67 $args['order'] = $data['order'];
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
85 //TODO: Taxonomy should implement after
86 $_taxonomies = get_object_taxonomies($data['post_type'], 'objects');
87 $_taxonomy_list = $data['taxonomy_lists'];
88 $filtered_taxonomy_lists = [];
89
90 foreach ($_taxonomies as $index => $object) {
91 if (in_array($object->name, Fns::get_excluded_taxonomy())) {
92 continue;
93 }
94
95 $filtered_taxonomy_lists[$object->name] = isset($_taxonomy_list[$object->name]) ? $_taxonomy_list[$object->name]['options'] : NULL;
96 $_term_list = isset($_taxonomy_list[$object->name]) ? wp_list_pluck($_taxonomy_list[$object->name]['options'], 'value') : NULL;
97 if (!empty($_term_list)) {
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'];
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);
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;
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 } elseif (in_array($data['grid_layout'], ['grid-layout6', 'grid-layout6-2'])) {
158 $_posts_per_page = 3;
159 } elseif (in_array($data['grid_layout'], ['grid-layout5', 'grid-layout5-2'])) {
160 $_posts_per_page = 5;
161 }
162 } elseif ('list' === $prefix) {
163 if (in_array($data['list_layout'], ['list-layout2', 'list-layout2-2'])) {
164 $_posts_per_page = 7;
165 } elseif (in_array($data['list_layout'], ['list-layout3', 'list-layout3-2'])) {
166 $_posts_per_page = 5;
167 }
168 } elseif ('grid_hover' === $prefix) {
169 if (in_array($data['grid_hover_layout'], ['grid_hover-layout4', 'grid_hover-layout4-2'])) {
170 $_posts_per_page = 7;
171 } elseif (in_array($data['grid_hover_layout'], [
172 'grid_hover-layout5',
173 'grid_hover-layout5-2'
174 ])) {
175 $_posts_per_page = 3;
176 } elseif (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 } elseif (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 } elseif (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 //TODO: Make Query
230 $query = new WP_Query($args);
231
232 $post_layout = $data[$prefix . '_layout'];
233
234 $send_data = [
235 'posts' => [],
236 'total_post' => $query->found_posts,
237 'query_args' => $args,
238 'query_info' => [
239 'prefix' => $prefix,
240 'layout' => $post_layout,
241 'taxonomy' => $post_tax_list
242 ]
243 ];
244
245 // $send_data['total_post'] = esc_html( $query->found_posts );
246 if ($query->have_posts()) {
247 $pCount = 1;
248 while ($query->have_posts()) {
249 $query->the_post();
250 $id = get_the_id();
251 $post_count = $query->post_count;
252 set_query_var('tpg_post_count', $pCount);
253 set_query_var('tpg_total_posts', $post_count);
254 global $post;
255
256 $cf_group = isset($data['acf_data_lists'][$data["post_type"] . '_cf_group']) ? $data['acf_data_lists'][$data["post_type"] . '_cf_group']['options'] : [];
257 $cf_group_collection = wp_list_pluck($cf_group, 'value');
258
259 $acfArgs = [
260 'is_guten' => 'yes',
261 'show_acf' => $data['show_acf'],
262 'cf_hide_empty_value' => $data['cf_hide_empty_value'],
263 'cf_show_only_value' => $data['cf_show_only_value'],
264 'cf_hide_group_title' => $data['cf_hide_group_title'],
265 'cf_group' => $cf_group_collection,
266 ];
267
268 $acf_data = Fns::tpg_get_acf_data_elementor($acfArgs, $id, false);
269
270
271 //First image from the post
272 preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', get_the_content(), $matches);
273 if (empty($first_img)) { //Defines a default image
274 $first_img = RT_THE_POST_GRID_PLUGIN_PATH . "/images/default.png";
275 } else {
276 $first_img = $matches [1] [0];
277 }
278
279
280 $category_terms_list = get_the_terms($id, $data['category_source'] ? $data['category_source'] : 'category');
281 $tags_terms_list = get_the_terms($id, $data['tag_source'] ? $data['tag_source'] : 'post_tag');
282
283 $category_terms = wp_list_pluck($category_terms_list, 'name');
284 $tags_terms = wp_list_pluck($tags_terms_list, 'name');
285 $img_url = esc_url_raw(get_the_post_thumbnail_url($id, $data['image_size']));
286 $img_offset_url = '';
287 if (isset($data['image_offset_size']) && $data['image_offset_size']) {
288 $img_offset_url = esc_url_raw(get_the_post_thumbnail_url($id, $data['image_offset_size']));
289 }
290
291 // error_log( print_r( $category_terms , true ) . "\n\n" , 3, __DIR__ . '/log.txt' );
292
293
294 if ('first_image' === $data['media_source']) {
295 $img_url = Fns::get_content_first_image($id, 'url');
296 }
297
298 if (isset($data['default_image']['id']) && !$img_url) {
299 $img_size_key = 'image_size';
300 $default_img_url = wp_get_attachment_image_src($data['default_image']['id'], $data[$img_size_key]);
301 $img_url = $default_img_url[0];
302 }
303
304 $excerpt_args = [
305 'excerpt_type' => $data['excerpt_type'],
306 'excerpt_limit' => $data['excerpt_limit'],
307 'excerpt_more_text' => $data['excerpt_more_text'],
308 ];
309
310 $exerpt = Fns::get_the_excerpt($id, $excerpt_args);
311
312 $author_id = get_the_author_meta('ID');
313 $author_avatar_url = get_avatar_url($author_id);
314
315 $count_key = Fns::get_post_view_count_meta_key();
316 $get_view_count = get_post_meta($id, $count_key, true);
317
318 $send_data['posts'][] = [
319 "author_name" => esc_html(get_the_author_meta('display_name', $author_id)),
320 "avatar_url" => esc_url($author_avatar_url),
321 "comment_count" => esc_html(get_comments_number($id)),
322 "content" => get_the_content(),
323 "category" => !empty($category_terms) ? $category_terms : [],
324 "tags" => !empty($tags_terms) ? $tags_terms : '',
325 "excerpt" => $exerpt,
326 "id" => $id,
327 "image_url" => $img_url,
328 "thumb_url" => get_the_post_thumbnail_url($id, 'thumbnail'),
329 "offset_image_url" => $img_offset_url,
330 "post_date" => esc_html(get_the_date()),
331 "post_link" => get_the_permalink(),
332 "post_type" => $data["post_type"],
333 "prefix" => $prefix,
334 "post_count" => esc_html($get_view_count),
335 "title" => wp_kses($post->post_title, Fns::allowedHtml()),
336 'taxonomy_lists' => $filtered_taxonomy_lists,
337 "post_class" => join(' ', get_post_class(null, $id)),
338 "layout_style" => $data['layout_style'],
339 "hover_animation" => $data['hover_animation'],
340 'acf_data' => $acf_data,
341 'tpg_post_count' => $pCount,
342 'tpg_total_posts' => $post_count
343 ];
344
345 $pCount++;
346 }
347 } else {
348 $send_data['message'] = $data['no_posts_found_text'] ? $data['no_posts_found_text'] : __("No posts found", "the-post-grid");
349 $send_data['args'] = $args;
350 }
351
352 wp_reset_postdata();
353
354 return rest_ensure_response($send_data);
355 }
356 }
357