PluginProbe
UiCore Elements – Free widgets and templates for Elementor / 1.0.8
UiCore Elements – Free widgets and templates for Elementor v1.0.8
1.3.17 1.3.16 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 All 41 releases
uicore-elements / includes / controls / class-query.php

class-query.php in UiCore Elements – Free widgets and templates for Elementor 1.0.8, at includes/controls/class-query.php

117 lines 3.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace UiCoreElements\Controls;
3
4 use Elementor\Control_Select2;
5 defined('ABSPATH') || exit();
6
7 class Query extends Control_Select2
8 {
9 const CONTROL_ID = 'query';
10
11 public function get_type()
12 {
13 return self::CONTROL_ID;
14 }
15
16 public static function get_query_args($control_id, $settings, $current_id = null)
17 {
18
19 $defaults = [
20 $control_id . '_post_type' => 'post',
21 $control_id . '_posts_ids' => [],
22 'orderby' => 'date',
23 'order' => 'desc',
24 ];
25
26 $settings = wp_parse_args($settings, $defaults);
27
28 $post_type = $settings[$control_id . '_post_type'];
29 if($post_type == 'current'){
30
31 $query_type = get_post_meta( $current_id, 'tb_rule_include', true );
32 $query_type = isset($query_type[0]['rule']['value']) ? $query_type[0]['rule']['value'] : '';
33 switch ( $query_type ) {
34 case 'special-blog':
35 $post_type = 'post';
36 break;
37 default:
38 if( ($type = substr( $query_type, 0, 11 )) === "cp-archive-" ){
39 $post_type = str_replace($type,'',$query_type);
40 break;
41 }
42 $post_type = 'post';
43 break;
44 }
45 }
46
47 if(!isset($settings['__current_page'])){
48 if (get_query_var('paged')) {
49 $paged = get_query_var('paged');
50 } elseif (get_query_var('page')) {
51 $paged = get_query_var('page');
52 } else {
53 $paged = 1;
54 }
55 } else {
56 $paged = $settings['__current_page'];
57 }
58
59 $query_args = [
60 'orderby' => $settings['orderby'],
61 'order' => $settings['order'],
62 'post_status' => 'publish', // Hide drafts/private posts for admins
63 'paged' => $paged,
64 'posts_per_page' => isset( $settings['item_limit'] ) ? $settings['item_limit']['size'] : get_option('posts_per_page'),
65 ];
66
67 // If the offset is set, we need to set the offset and paged parameters
68 if(isset($settings['offset']) && !empty($settings['offset']['size'])){
69 $query_args['offset'] = $settings['offset']['size'];
70 }
71
72 if(isset($settings['sticky']) && $settings['sticky']){
73 $query_args['ignore_sticky_posts'] = 0;
74 }
75
76 // If filters are enabled, checks for url taxonomy params. Eg: since not every post widget has filters, so we also need to check if is set.
77 if( isset($settings['post_filtering']) && $settings['post_filtering'] && isset($_GET['tax']) && isset($_GET['term'])){
78
79 $query_args['tax_query'][] = [
80 'taxonomy' => $_GET['tax'],
81 'field' => 'term_id',
82 'terms' => $_GET['term'],
83 ];
84
85 } else {
86 $query_args['post_type'] = $post_type;
87 $query_args['tax_query'] = [];
88
89 $taxonomies = get_object_taxonomies($post_type, 'objects');
90
91 foreach ($taxonomies as $object) {
92 $setting_key = $control_id . '_' . $object->name . '_ids';
93
94 if (!empty($settings[$setting_key])) {
95 $terms_list = $settings[$setting_key];
96 $query_args['tax_query'][] = [
97 'taxonomy' => $object->name,
98 'field' => 'term_id',
99 'terms' => $terms_list,
100 ];
101 }
102 }
103 }
104
105 //Enable for data analysis
106 // error_log( __FILE__ . '@' . __LINE__ );
107 // error_log( __METHOD__);
108 // \error_log(print_r($query_args, true));
109 // \error_log("-----------------");
110
111 return $query_args;
112 }
113
114 }
115
116 \Elementor\Plugin::$instance->controls_manager->register_control('query', new Query());
117