PluginProbe
UiCore Elements – Free widgets and templates for Elementor / 1.0.9
UiCore Elements – Free widgets and templates for Elementor v1.0.9
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.9, at includes/controls/class-query.php

118 lines 3.9 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 'ignore_sticky_posts' => true,
65 'posts_per_page' => isset( $settings['item_limit'] ) ? $settings['item_limit']['size'] : get_option('posts_per_page'),
66 ];
67
68 // If the offset is set, we need to set the offset and paged parameters
69 if(isset($settings['offset']) && !empty($settings['offset']['size'])){
70 $query_args['offset'] = $settings['offset']['size'];
71 }
72
73 if( isset( $settings['sticky'] ) && $settings['sticky']){
74 $query_args['ignore_sticky_posts'] = false;
75 }
76
77 // 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.
78 if( isset($settings['post_filtering']) && $settings['post_filtering'] && isset($_GET['tax']) && isset($_GET['term'])){
79
80 $query_args['tax_query'][] = [
81 'taxonomy' => $_GET['tax'],
82 'field' => 'term_id',
83 'terms' => $_GET['term'],
84 ];
85
86 } else {
87 $query_args['post_type'] = $post_type;
88 $query_args['tax_query'] = [];
89
90 $taxonomies = get_object_taxonomies($post_type, 'objects');
91
92 foreach ($taxonomies as $object) {
93 $setting_key = $control_id . '_' . $object->name . '_ids';
94
95 if (!empty($settings[$setting_key])) {
96 $terms_list = $settings[$setting_key];
97 $query_args['tax_query'][] = [
98 'taxonomy' => $object->name,
99 'field' => 'term_id',
100 'terms' => $terms_list,
101 ];
102 }
103 }
104 }
105
106 //Enable for data analysis
107 // error_log( __FILE__ . '@' . __LINE__ );
108 // error_log( __METHOD__);
109 // \error_log(print_r($query_args, true));
110 // \error_log("-----------------");
111
112 return $query_args;
113 }
114
115 }
116
117 \Elementor\Plugin::$instance->controls_manager->register_control('query', new Query());
118