PluginProbe
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder / 51.1.44
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder v51.1.44
51.1.87 51.1.86 51.1.84 51.1.85 51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 All 41 releases
king-addons / includes / widgets / Facet_Price / Facet_Price.php

Facet_Price.php in King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder 51.1.44, at includes/widgets/Facet_Price/Facet_Price.php

233 lines 6.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Facet Price widget.
4 *
5 * @package King_Addons
6 */
7
8 namespace King_Addons;
9
10 use Elementor\Controls_Manager;
11 use Elementor\Widget_Base;
12
13 if (!defined('ABSPATH')) {
14 exit;
15 }
16
17 /**
18 * Price range filter widget.
19 */
20 class Facet_Price extends Widget_Base
21 {
22 /**
23 * Widget slug.
24 *
25 * @return string
26 */
27 public function get_name(): string
28 {
29 return 'king-addons-facet-price';
30 }
31
32 /**
33 * Widget title.
34 *
35 * @return string
36 */
37 public function get_title(): string
38 {
39 return esc_html__('Facet Price', 'king-addons');
40 }
41
42 /**
43 * Widget icon.
44 *
45 * @return string
46 */
47 public function get_icon(): string
48 {
49 return 'eicon-range-slider';
50 }
51
52 /**
53 * Categories.
54 *
55 * @return array<int, string>
56 */
57 public function get_categories(): array
58 {
59 return ['king-addons'];
60 }
61
62 /**
63 * Style dependencies.
64 *
65 * @return array<int, string>
66 */
67 public function get_style_depends(): array
68 {
69 return [
70 KING_ADDONS_ASSETS_UNIQUE_KEY . '-facet-price-style',
71 ];
72 }
73
74 /**
75 * Script dependencies.
76 *
77 * @return array<int, string>
78 */
79 public function get_script_depends(): array
80 {
81 return [
82 KING_ADDONS_ASSETS_UNIQUE_KEY . '-facet-price-script',
83 ];
84 }
85
86 /**
87 * Register controls.
88 *
89 * @return void
90 */
91 public function register_controls(): void
92 {
93 $this->start_controls_section(
94 'kng_facet_price_section',
95 [
96 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Facet Price', 'king-addons'),
97 'tab' => Controls_Manager::TAB_CONTENT,
98 ]
99 );
100
101 $this->add_control(
102 'kng_filters_query_id',
103 [
104 'label' => esc_html__('Filter Query ID', 'king-addons'),
105 'type' => Controls_Manager::TEXT,
106 'placeholder' => esc_html__('shop_grid_1', 'king-addons'),
107 ]
108 );
109
110 $this->add_control(
111 'kng_min_value',
112 [
113 'label' => esc_html__('Minimum Price', 'king-addons'),
114 'type' => Controls_Manager::NUMBER,
115 'default' => 0,
116 ]
117 );
118
119 $this->add_control(
120 'kng_max_value',
121 [
122 'label' => esc_html__('Maximum Price', 'king-addons'),
123 'type' => Controls_Manager::NUMBER,
124 'default' => 100,
125 ]
126 );
127
128 $this->add_control(
129 'kng_step',
130 [
131 'label' => esc_html__('Step', 'king-addons'),
132 'type' => Controls_Manager::NUMBER,
133 'default' => 1,
134 'min' => 0.1,
135 ]
136 );
137
138 $this->end_controls_section();
139 }
140
141 /**
142 * Render widget output.
143 *
144 * @return void
145 */
146 public function render(): void
147 {
148 $settings = $this->get_settings_for_display();
149 $query_id = sanitize_title($settings['kng_filters_query_id'] ?? '');
150
151 if ('' === $query_id) {
152 return;
153 }
154
155 $min = isset($settings['kng_min_value']) ? (float) $settings['kng_min_value'] : 0;
156 $max = isset($settings['kng_max_value']) ? (float) $settings['kng_max_value'] : 0;
157 $step = isset($settings['kng_step']) ? (float) $settings['kng_step'] : 1;
158 $show_buckets = true;
159
160 ?>
161 <div class="king-addons-facet king-addons-facet--price" data-ka-filters-query-id="<?php echo esc_attr($query_id); ?>">
162 <div class="king-addons-facet__row">
163 <label class="king-addons-facet__label">
164 <?php echo esc_html__('Min', 'king-addons'); ?>
165 <input
166 type="number"
167 class="king-addons-facet__input"
168 data-ka-filter-type="price"
169 data-ka-price-role="min"
170 data-ka-filters-query-id="<?php echo esc_attr($query_id); ?>"
171 step="<?php echo esc_attr($step); ?>"
172 value="<?php echo esc_attr($min); ?>"
173 />
174 </label>
175 <label class="king-addons-facet__label">
176 <?php echo esc_html__('Max', 'king-addons'); ?>
177 <input
178 type="number"
179 class="king-addons-facet__input"
180 data-ka-filter-type="price"
181 data-ka-price-role="max"
182 data-ka-filters-query-id="<?php echo esc_attr($query_id); ?>"
183 step="<?php echo esc_attr($step); ?>"
184 value="<?php echo esc_attr($max); ?>"
185 />
186 </label>
187 </div>
188 <?php if ($show_buckets) : ?>
189 <ul class="king-addons-facet__buckets" data-ka-filters-query-id="<?php echo esc_attr($query_id); ?>">
190 <?php
191 $buckets = apply_filters(
192 'king_addons/faceted_filters/price_buckets',
193 [
194 ['min' => 0, 'max' => 25],
195 ['min' => 25, 'max' => 50],
196 ['min' => 50, 'max' => 100],
197 ['min' => 100, 'max' => 250],
198 ['min' => 250, 'max' => 999999],
199 ],
200 'woo_products_grid'
201 );
202 foreach ($buckets as $idx => $bucket) :
203 $label = sprintf('%s - %s', wc_price($bucket['min']), wc_price($bucket['max']));
204 ?>
205 <li class="king-addons-facet__bucket">
206 <button
207 type="button"
208 class="king-addons-facet__bucket-btn"
209 data-ka-filter-type="price-bucket"
210 data-ka-filters-query-id="<?php echo esc_attr($query_id); ?>"
211 data-ka-price-bucket="<?php echo esc_attr((string) $idx); ?>"
212 data-ka-price-min="<?php echo esc_attr($bucket['min']); ?>"
213 data-ka-price-max="<?php echo esc_attr($bucket['max']); ?>"
214 data-ka-price-label="<?php echo esc_attr(wp_strip_all_tags($label)); ?>"
215 >
216 <span class="king-addons-facet__bucket-label"><?php echo wp_kses_post($label); ?></span>
217 <span class="king-addons-facet__bucket-count" data-ka-price-bucket="<?php echo esc_attr((string) $idx); ?>"></span>
218 </button>
219 </li>
220 <?php endforeach; ?>
221 </ul>
222 <?php endif; ?>
223 </div>
224 <?php
225 }
226 }
227
228
229
230
231
232
233