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 / Blocks / BlockBase.php
the-post-grid / app / Controllers / Blocks Last commit date
BlockController 2 years ago BlockBase.php 2 years ago GridHoverLayout.php 2 years ago GridLayout.php 2 years ago ListLayout.php 2 years ago RttpgRow.php 2 years ago SectionTitle.php 2 years ago
BlockBase.php
309 lines
1 <?php
2
3 namespace RT\ThePostGrid\Controllers\Blocks;
4
5 use RT\ThePostGrid\Helpers\Fns;
6
7 abstract class BlockBase {
8 public $last_post_id;
9
10 abstract public function get_attributes();
11
12 abstract public function render_block( $data );
13
14 /**
15 * Script controller
16 *
17 * @param $data
18 *
19 * @return void
20 */
21
22 public function get_script_depends( $data ) {
23
24 $settings = get_option( rtTPG()->options['settings'] );
25 $prefix = $data['prefix'];
26 $this->last_post_id = Fns::get_last_post_id();
27
28 if ( rtTPG()->hasPro() && ( $data['is_thumb_lightbox'] === 'show' || 'popup' == $data['post_link_type'] || 'multi_popup' == $data['post_link_type'] || $data[ $prefix . '_layout' ] == 'grid-layout7' || $data[ $prefix . '_layout' ] == 'slider-layout4' ) ) {
29 wp_enqueue_style( 'rt-magnific-popup' );
30 wp_enqueue_script( 'rt-magnific-popup' );
31 }
32
33 if ( rtTPG()->hasPro() && ( 'popup' == $data['post_link_type'] || 'multi_popup' == $data['post_link_type'] ) ) {
34 wp_enqueue_script( 'rt-scrollbar' );
35 add_action( 'wp_footer', [ Fns::class, 'get_modal_markup' ] );
36 }
37
38 if ( rtTPG()->hasPro() && 'button' == $data['filter_type'] && 'carousel' == $data['filter_btn_style'] ) {
39 wp_enqueue_script( 'swiper' );
40 }
41
42 if ( isset( $data['grid_layout_style'] ) && 'masonry' === $data['grid_layout_style'] ) {
43 wp_enqueue_script( 'rt-isotope-js' );
44 }
45
46 if ( 'show' == $data['show_pagination'] && 'pagination_ajax' == $data['pagination_type'] ) {
47 wp_enqueue_script( 'rt-pagination' );
48 }
49
50 if ( isset( $settings['tpg_load_script'] ) ) {
51 wp_enqueue_style( 'rt-fontawsome' );
52 wp_enqueue_style( 'rt-flaticon' );
53 wp_enqueue_style( 'rt-tpg-block' );
54 if ( $data['prefix'] === 'slider' ) {
55 wp_enqueue_style( 'swiper' );
56 }
57 }
58
59 wp_enqueue_script( 'imagesloaded' );
60 if ( $data['prefix'] === 'slider' ) {
61 wp_enqueue_script( 'swiper' );
62 }
63 wp_enqueue_script( 'rt-tpg' );
64 wp_enqueue_script( 'rttpg-block-pro' );
65 }
66
67 /**
68 * Post Query for gutenberg
69 *
70 * @param $data
71 * @param $prefix
72 *
73 * @return array
74 */
75 public function post_query_guten( $data, $prefix = '' ) {
76 $post_type = isset( $data['post_type'] ) ? $data['post_type'] : 'post';
77 $args = [
78 'post_type' => [ $post_type ],
79 'post_status' => isset( $data['post_status'] ) ? $data['post_status'] : 'publish',
80 ];
81
82 if ( $data['post_id'] ) {
83 $post_ids = explode( ',', $data['post_id'] );
84 $post_ids = array_map( 'trim', $post_ids );
85 $args['post__in'] = $post_ids;
86 }
87
88 if ( $prefix !== 'slider' && 'show' === $data['show_pagination'] ) {
89 $_paged = is_front_page() ? "page" : "paged";
90 $args['paged'] = get_query_var( $_paged ) ? absint( get_query_var( $_paged ) ) : 1;
91 }
92
93 if ( rtTPG()->hasPro() && 'yes' == $data['ignore_sticky_posts'] ) {
94 $args['ignore_sticky_posts'] = 1;
95 }
96
97 if ( $orderby = $data['orderby'] ) {
98 if ( ! rtTPG()->hasPro() && 'rand' == $orderby ) {
99 $orderby = 'date';
100 }
101 $args['orderby'] = $orderby;
102 }
103
104 if ( $data['order'] ) {
105 $args['order'] = $data['order'];
106 }
107
108 if ( $data['instant_query'] ) {
109 $args = Fns::get_instant_query( $data['instant_query'], $args );
110 }
111
112 if ( $data['author'] ) {
113 $args['author__in'] = $data['author'];
114 }
115
116 if ( rtTPG()->hasPro() && ( $data['start_date'] || $data['end_date'] ) ) {
117 $args['date_query'] = [
118 [
119 'after' => trim( $data['start_date'] ),
120 'before' => trim( $data['end_date'] ),
121 'inclusive' => true,
122 ],
123 ];
124 }
125
126 $_taxonomies = get_object_taxonomies( $data['post_type'], 'objects' );
127 $_taxonomy_list = $data['taxonomy_lists'];
128 $filtered_taxonomy_lists = [];
129
130 if ( isset( $_taxonomy_list ) && ! empty( $_taxonomy_list ) ) {
131 foreach ( $_taxonomies as $index => $object ) {
132 if ( in_array( $object->name, Fns::get_excluded_taxonomy() ) ) {
133 continue;
134 }
135
136 if ( ! isset( $_taxonomy_list[ $object->name ]['options'] ) ) {
137 continue;
138 }
139
140 $_term_list = wp_list_pluck( $_taxonomy_list[ $object->name ]['options'], 'value' );
141 if ( ! empty( $_term_list ) ) {
142 //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
143 $args['tax_query'][] = [
144 'taxonomy' => $object->name,
145 'field' => 'term_id',
146 'terms' => $_term_list,
147 ];
148 }
149
150 }
151 }
152
153 if ( ! empty( $args['tax_query'] ) && $data['relation'] ) {
154 $args['tax_query']['relation'] = $data['relation']; //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
155 }
156
157 if ( $data['post_keyword'] ) {
158 $args['s'] = $data['post_keyword'];
159 }
160
161 $offset_posts = $excluded_ids = [];
162 if ( $data['exclude'] || $data['offset'] ) {
163 if ( $data['exclude'] ) {
164 $excluded_ids = explode( ',', $data['exclude'] );
165 $excluded_ids = array_map( 'trim', $excluded_ids );
166 }
167
168 if ( $data['offset'] ) {
169 $_temp_args = $args;
170 unset( $_temp_args['paged'] );
171 $_temp_args['posts_per_page'] = $data['offset'];
172 $_temp_args['fields'] = 'ids';
173
174 $offset_posts = get_posts( $_temp_args );
175 }
176
177 $excluded_post_ids = array_merge( $offset_posts, $excluded_ids );
178 $args['post__not_in'] = array_unique( $excluded_post_ids ); //phpcs:ignore WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in
179 }
180
181 if ( $prefix !== 'slider' ) {
182 if ( $data['post_limit'] ) {
183 if ( 'show' !== $data['show_pagination'] ) {
184 $args['posts_per_page'] = $data['post_limit'];
185 } else {
186 $tempArgs = $args;
187 $tempArgs['posts_per_page'] = $data['post_limit'];
188 $tempArgs['paged'] = 1;
189 $tempArgs['fields'] = 'ids';
190 if ( ! empty( $offset_posts ) ) {
191 $tempArgs['post__not_in'] = $offset_posts; //phpcs:ignore WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in
192 }
193 $tempQ = new \WP_Query( $tempArgs );
194 if ( ! empty( $tempQ->posts ) ) {
195 $args['post__in'] = $tempQ->posts;
196 $args['posts_per_page'] = $data['post_limit'];
197 }
198 }
199 } else {
200 $_posts_per_page = 9;
201 if ( 'grid' === $prefix ) {
202 if ( $data['grid_layout'] == 'grid-layout5' ) {
203 $_posts_per_page = 5;
204 } elseif ( in_array( $data['grid_layout'], [ 'grid-layout6', 'grid-layout6-2' ] ) ) {
205 $_posts_per_page = 3;
206 } elseif ( in_array( $data['grid_layout'], [ 'grid-layout5', 'grid-layout5-2' ] ) ) {
207 $_posts_per_page = 5;
208 }
209 } elseif ( 'list' === $prefix ) {
210 if ( in_array( $data['list_layout'], [ 'list-layout2', 'list-layout2-2' ] ) ) {
211 $_posts_per_page = 7;
212 } elseif ( in_array( $data['list_layout'], [ 'list-layout3', 'list-layout3-2' ] ) ) {
213 $_posts_per_page = 5;
214 }
215 } elseif ( 'grid_hover' === $prefix ) {
216 if ( in_array( $data['grid_hover_layout'], [ 'grid_hover-layout4', 'grid_hover-layout4-2' ] ) ) {
217 $_posts_per_page = 7;
218 } elseif ( in_array( $data['grid_hover_layout'], [
219 'grid_hover-layout5',
220 'grid_hover-layout5-2'
221 ] ) ) {
222 $_posts_per_page = 3;
223 } elseif ( in_array( $data['grid_hover_layout'],
224 [
225 'grid_hover-layout6',
226 'grid_hover-layout6-2',
227 'grid_hover-layout9',
228 'grid_hover-layout9-2',
229 'grid_hover-layout10',
230 'grid_hover-layout11'
231 ] )
232 ) {
233 $_posts_per_page = 4;
234 } elseif ( in_array( $data['grid_hover_layout'], [
235 'grid_hover-layout7',
236 'grid_hover-layout7-2',
237 'grid_hover-layout8'
238 ] ) ) {
239 $_posts_per_page = 5;
240 } elseif ( in_array( $data['grid_hover_layout'],
241 [
242 'grid_hover-layout6',
243 'grid_hover-layout6-2'
244 ] )
245 ) {
246 $_posts_per_page = 4;
247 }
248 }
249
250 $args['posts_per_page'] = $_posts_per_page;
251 }
252
253 if ( 'show' === $data['show_pagination'] && $data['display_per_page'] ) {
254 $args['posts_per_page'] = $data['display_per_page'];
255 }
256 } else {
257 $slider_per_page = $data['post_limit'];
258 if ( $data['slider_layout'] == 'slider-layout10' ) {
259 $slider_reminder = ( intval( $data['post_limit'], 10 ) % 5 );
260 if ( $slider_reminder ) {
261 $slider_per_page = ( $data['post_limit'] - $slider_reminder + 5 );
262 }
263 }
264 $args['posts_per_page'] = $slider_per_page;
265 }
266
267
268 //Builder query
269 if ( ! empty( $data['is_builder'] ) && $data['is_builder'] === 'yes' ) {
270 $args['posts_per_page'] = get_option('posts_per_page');
271 if ( is_tag() ) {
272 $args['tag'] = get_query_var( 'tag' );
273 }
274
275 if ( is_category() ) {
276 $args['cat'] = get_query_var( 'cat' );
277 }
278
279 if ( is_author() ) {
280 $args['author'] = get_query_var( 'author' );
281 }
282
283 if ( is_date() ) {
284 $year = get_query_var( 'year' );
285 $monthnum = get_query_var( 'monthnum' );
286 $day = get_query_var( 'day' );
287
288 $args = [
289 'date_query' => [
290 [
291 'year' => $year,
292 'month' => $monthnum,
293 'day' => $day,
294 ],
295 ],
296 ];
297 }
298
299 if ( is_search() ) {
300 $search = get_query_var( 's' );
301 $args['s'] = $search;
302 }
303 }
304
305
306 return $args;
307 }
308
309 }