PluginProbe
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder / 51.1.65
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder v51.1.65
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 51.1.45 51.1.46 All 39 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.65, at includes/widgets/Facet_Price/Facet_Price.php

238 lines 7.1 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 public function get_custom_help_url()
87 {
88 return 'mailto:bug@kingaddons.com?subject=Bug Report - King Addons&body=Please describe the issue';
89 }
90
91 /**
92 * Register controls.
93 *
94 * @return void
95 */
96 public function register_controls(): void
97 {
98 $this->start_controls_section(
99 'kng_facet_price_section',
100 [
101 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Facet Price', 'king-addons'),
102 'tab' => Controls_Manager::TAB_CONTENT,
103 ]
104 );
105
106 $this->add_control(
107 'kng_filters_query_id',
108 [
109 'label' => esc_html__('Filter Query ID', 'king-addons'),
110 'type' => Controls_Manager::TEXT,
111 'placeholder' => esc_html__('shop_grid_1', 'king-addons'),
112 ]
113 );
114
115 $this->add_control(
116 'kng_min_value',
117 [
118 'label' => esc_html__('Minimum Price', 'king-addons'),
119 'type' => Controls_Manager::NUMBER,
120 'default' => 0,
121 ]
122 );
123
124 $this->add_control(
125 'kng_max_value',
126 [
127 'label' => esc_html__('Maximum Price', 'king-addons'),
128 'type' => Controls_Manager::NUMBER,
129 'default' => 100,
130 ]
131 );
132
133 $this->add_control(
134 'kng_step',
135 [
136 'label' => esc_html__('Step', 'king-addons'),
137 'type' => Controls_Manager::NUMBER,
138 'default' => 1,
139 'min' => 0.1,
140 ]
141 );
142
143 $this->end_controls_section();
144 }
145
146 /**
147 * Render widget output.
148 *
149 * @return void
150 */
151 public function render(): void
152 {
153 $settings = $this->get_settings_for_display();
154 $query_id = sanitize_title($settings['kng_filters_query_id'] ?? '');
155
156 if ('' === $query_id) {
157 return;
158 }
159
160 $min = isset($settings['kng_min_value']) ? (float) $settings['kng_min_value'] : 0;
161 $max = isset($settings['kng_max_value']) ? (float) $settings['kng_max_value'] : 0;
162 $step = isset($settings['kng_step']) ? (float) $settings['kng_step'] : 1;
163 $show_buckets = true;
164
165 ?>
166 <div class="king-addons-facet king-addons-facet--price" data-ka-filters-query-id="<?php echo esc_attr($query_id); ?>">
167 <div class="king-addons-facet__row">
168 <label class="king-addons-facet__label">
169 <?php echo esc_html__('Min', 'king-addons'); ?>
170 <input
171 type="number"
172 class="king-addons-facet__input"
173 data-ka-filter-type="price"
174 data-ka-price-role="min"
175 data-ka-filters-query-id="<?php echo esc_attr($query_id); ?>"
176 step="<?php echo esc_attr($step); ?>"
177 value="<?php echo esc_attr($min); ?>"
178 />
179 </label>
180 <label class="king-addons-facet__label">
181 <?php echo esc_html__('Max', 'king-addons'); ?>
182 <input
183 type="number"
184 class="king-addons-facet__input"
185 data-ka-filter-type="price"
186 data-ka-price-role="max"
187 data-ka-filters-query-id="<?php echo esc_attr($query_id); ?>"
188 step="<?php echo esc_attr($step); ?>"
189 value="<?php echo esc_attr($max); ?>"
190 />
191 </label>
192 </div>
193 <?php if ($show_buckets) : ?>
194 <ul class="king-addons-facet__buckets" data-ka-filters-query-id="<?php echo esc_attr($query_id); ?>">
195 <?php
196 $buckets = apply_filters(
197 'king_addons/faceted_filters/price_buckets',
198 [
199 ['min' => 0, 'max' => 25],
200 ['min' => 25, 'max' => 50],
201 ['min' => 50, 'max' => 100],
202 ['min' => 100, 'max' => 250],
203 ['min' => 250, 'max' => 999999],
204 ],
205 'woo_products_grid'
206 );
207 foreach ($buckets as $idx => $bucket) :
208 $label = sprintf('%s - %s', wc_price($bucket['min']), wc_price($bucket['max']));
209 ?>
210 <li class="king-addons-facet__bucket">
211 <button
212 type="button"
213 class="king-addons-facet__bucket-btn"
214 data-ka-filter-type="price-bucket"
215 data-ka-filters-query-id="<?php echo esc_attr($query_id); ?>"
216 data-ka-price-bucket="<?php echo esc_attr((string) $idx); ?>"
217 data-ka-price-min="<?php echo esc_attr($bucket['min']); ?>"
218 data-ka-price-max="<?php echo esc_attr($bucket['max']); ?>"
219 data-ka-price-label="<?php echo esc_attr(wp_strip_all_tags($label)); ?>"
220 >
221 <span class="king-addons-facet__bucket-label"><?php echo wp_kses_post($label); ?></span>
222 <span class="king-addons-facet__bucket-count" data-ka-price-bucket="<?php echo esc_attr((string) $idx); ?>"></span>
223 </button>
224 </li>
225 <?php endforeach; ?>
226 </ul>
227 <?php endif; ?>
228 </div>
229 <?php
230 }
231 }
232
233
234
235
236
237
238