PluginProbe ʕ •ᴥ•ʔ
The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid / 7.8.8
The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid v7.8.8
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 / GetTickerPostsV1.php
the-post-grid / app / Controllers / Api Last commit date
ACFV1.php 8 months ago ElImport.php 8 months ago FrontEndFilterV1.php 8 months ago GetBuilderData.php 8 months ago GetCategories.php 8 months ago GetPostsV1.php 8 months ago GetTermObject.php 8 months ago GetTickerPostsV1.php 8 months ago ImageSizeV1.php 8 months ago RestApi.php 8 months ago
GetTickerPostsV1.php
188 lines
1 <?php
2
3 namespace RT\ThePostGrid\Controllers\Api;
4
5 use RT\ThePostGrid\Helpers\Fns;
6 use WP_Query;
7
8 class GetTickerPostsV1 {
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(
15 'rttpg/v1',
16 'tickerquery',
17 [
18 'methods' => 'POST',
19 'callback' => [ $this, 'get_all_posts' ],
20 'permission_callback' => function () {
21 return current_user_can( 'edit_posts' );
22 },
23 ]
24 );
25 }
26
27 public function get_all_posts( $data ) {
28 $_post_type = ! empty( $data['post_type'] ) ? esc_html( $data['post_type'] ) : 'post';
29 $post_type = Fns::available_post_type( $_post_type );
30 $args = [
31 'post_type' => $post_type,
32 'post_status' => 'publish',
33 ];
34
35 $excluded_ids = null;
36 if ( $data['post_id'] ) {
37 $post_ids = explode( ',', $data['post_id'] );
38 $post_ids = array_map( 'trim', $post_ids );
39
40 $args['post__in'] = $post_ids;
41
42 if ( $excluded_ids != null && is_array( $excluded_ids ) ) {
43 $args['post__in'] = array_diff( $post_ids, $excluded_ids );
44 }
45 }
46
47 if ( 'yes' == $data['ignore_sticky_posts'] ) {
48 $args['ignore_sticky_posts'] = 1;
49 }
50
51 if ( $orderby = $data['orderby'] ) {
52 $args['orderby'] = $orderby;
53 }
54
55 if ( $data['order'] ) {
56 $args['order'] = $data['order'];
57 }
58
59 if ( $data['instant_query'] ) {
60 $args = Fns::get_instant_query( $data['instant_query'], $args );
61 }
62
63 if ( $data['author'] ) {
64 $args['author__in'] = $data['author'];
65 }
66
67 if ( $data['start_date'] || $data['end_date'] ) {
68 $args['date_query'] = [
69 [
70 'after' => trim( $data['start_date'] ),
71 'before' => trim( $data['end_date'] ),
72 'inclusive' => true,
73 ],
74 ];
75 }
76
77 // Taxonomy should implement after
78 $_taxonomies = get_object_taxonomies( $data['post_type'], 'objects' );
79 $_taxonomy_list = $data['taxonomy_lists'];
80 $filtered_taxonomy_lists = [];
81
82 foreach ( $_taxonomies as $index => $object ) {
83 if ( in_array( $object->name, Fns::get_excluded_taxonomy() ) ) {
84 continue;
85 }
86
87 $filtered_taxonomy_lists[ $object->name ] = isset( $_taxonomy_list[ $object->name ] ) ? $_taxonomy_list[ $object->name ]['options'] : null;
88 $_term_list = isset( $_taxonomy_list[ $object->name ] ) ? wp_list_pluck( $_taxonomy_list[ $object->name ]['options'], 'value' ) : null;
89 if ( ! empty( $_term_list ) ) {
90 //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
91 $args['tax_query'][] = [
92 'taxonomy' => $object->name,
93 'field' => 'term_id',
94 'terms' => $_term_list,
95 ];
96 }
97 if ( ! empty( $args['tax_query'] ) && $data['relation'] ) {
98 $args['tax_query']['relation'] = $data['relation']; //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
99 }
100 }
101
102 if ( $data['post_keyword'] ) {
103 $args['s'] = $data['post_keyword'];
104 }
105
106 $excluded_ids = [];
107 $offset_posts = [];
108 if ( $data['exclude'] || $data['offset'] ) {
109 if ( $data['exclude'] ) {
110 $excluded_ids = explode( ',', $data['exclude'] );
111 $excluded_ids = array_map( 'trim', $excluded_ids );
112 }
113
114 if ( $data['offset'] ) {
115 $_temp_args = $args;
116 unset( $_temp_args['paged'] );
117 $_temp_args['posts_per_page'] = $data['offset'];
118 $_temp_args['fields'] = 'ids';
119
120 $offset_posts = get_posts( $_temp_args );
121 }
122
123 $excluded_post_ids = array_merge( $offset_posts, $excluded_ids );
124 $args['post__not_in'] = array_unique( $excluded_post_ids ); //phpcs:ignore WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in
125 }
126
127 $query = new WP_Query( $args );
128
129 $send_data = [
130 'posts' => [],
131 'total_post' => $query->found_posts,
132 'query_args' => $args,
133 ];
134
135 // $send_data['total_post'] = esc_html( $query->found_posts );
136 if ( $query->have_posts() ) {
137 $pCount = 1;
138 while ( $query->have_posts() ) {
139 $query->the_post();
140 $id = get_the_id();
141 $post_count = $query->post_count;
142 set_query_var( 'tpg_post_count', $pCount );
143 set_query_var( 'tpg_total_posts', $post_count );
144 $category_terms_list = get_the_terms( $id, $data['category_source'] ? $data['category_source'] : 'category' );
145 $tags_terms_list = get_the_terms( $id, $data['tag_source'] ? $data['tag_source'] : 'post_tag' );
146 $category_terms = wp_list_pluck( $category_terms_list, 'name' );
147 $tags_terms = wp_list_pluck( $tags_terms_list, 'name' );
148
149 $excerpt_args = [
150 'excerpt_type' => $data['excerpt_type'],
151 'excerpt_limit' => $data['excerpt_limit'],
152 'excerpt_more_text' => $data['excerpt_more_text'],
153 ];
154
155 $exerpt = Fns::get_the_excerpt( $id, $excerpt_args );
156 $author_id = get_the_author_meta( 'ID' );
157 $count_key = Fns::get_post_view_count_meta_key();
158 $get_view_count = get_post_meta( $id, $count_key, true );
159
160 $send_data['posts'][] = [
161 'author_name' => esc_html( get_the_author_meta( 'display_name', $author_id ) ),
162 'comment_count' => esc_html( get_comments_number( $id ) ),
163 'category' => ! empty( $category_terms ) ? $category_terms : [],
164 'tags' => ! empty( $tags_terms ) ? $tags_terms : '',
165 'excerpt' => $exerpt,
166 'id' => $id,
167 'thumb_url' => get_the_post_thumbnail_url( $id, 'thumbnail' ),
168 'post_date' => esc_html( get_the_date() ),
169 'post_link' => get_the_permalink(),
170 'post_type' => $data['post_type'],
171 'post_count' => esc_html( $get_view_count ),
172 'title' => Fns::get_the_title( $id, $data ), // wp_kses( $post->post_title, Fns::allowedHtml() ),
173 'tpg_post_count' => $pCount,
174 'tpg_total_posts' => $post_count,
175 ];
176
177 $pCount ++;
178 }
179 } else {
180 $send_data['message'] = $data['no_posts_found_text'] ?? __( 'No posts found', 'the-post-grid' );
181 $send_data['args'] = $args;
182 }
183
184 wp_reset_postdata();
185
186 return rest_ensure_response( $send_data );
187 }
188 }