PluginProbe
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder / 51.1.86
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder v51.1.86
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 51.1.45 All 40 releases
← All changes | includes/widgets/Facet_Meta/Facet_Meta.php +49 -14 51.1.44 → 51.1.86 View file →
@@ -8,8 +8,9 @@
8 8 namespace King_Addons;
9 9
10 10 use Elementor\Controls_Manager;
11 11 use Elementor\Widget_Base;
12 +use King_Addons\Woo_Builder\Context as Woo_Context;
12 13
13 14 if (!defined('ABSPATH')) {
14 15 exit;
15 16 }
@@ -25,14 +26,24 @@
25 26 }
26 27
27 28 public function get_title(): string
28 29 {
29 - return esc_html__('Facet Meta/ACF', 'king-addons');
30 + return esc_html__('Custom Field Filter', 'king-addons');
30 31 }
31 32
33 + /**
34 + * Keywords.
35 + *
36 + * @return array<int, string>
37 + */
38 + public function get_keywords(): array
39 + {
40 + return ['shop', 'product', 'filter', 'filters', 'ajax', 'woocommerce', 'acf', 'meta', 'sku', 'faceted', 'smart filters'];
41 + }
42 +
32 43 public function get_icon(): string
33 44 {
34 - return 'eicon-filter';
45 + return 'king-addons-icon king-addons-facet-meta';
35 46 }
36 47
37 48 public function get_categories(): array
38 49 {
@@ -48,9 +59,14 @@
48 59 {
49 60 return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-facet-meta-style'];
50 61 }
51 62
52 - protected function register_controls(): void
63 + public function get_custom_help_url()
64 + {
65 + return 'mailto:[email protected]?subject=Bug Report - King Addons&body=Please describe the issue';
66 + }
67 +
68 + protected function register_controls(): void
53 69 {
54 70 $this->start_controls_section(
55 71 'section_content',
56 72 [
@@ -58,14 +74,16 @@
58 74 'tab' => Controls_Manager::TAB_CONTENT,
59 75 ]
60 76 );
61 77
78 + Core::renderUpgradeProSection($this, Controls_Manager::RAW_HTML, 'facet-meta', 'facet_meta_pro_notice');
79 +
62 80 $this->add_control(
63 81 'query_id',
64 82 [
65 - 'label' => esc_html__('Query ID', 'king-addons'),
83 + 'label' => esc_html__('Shop Filters ID', 'king-addons'),
66 84 'type' => Controls_Manager::TEXT,
67 - 'description' => esc_html__('Must match the grid Query ID.', 'king-addons'),
85 + 'description' => esc_html__('Must match the Shop Filters ID on the product grid.', 'king-addons'),
68 86 ]
69 87 );
70 88
71 89 $this->add_control(
@@ -99,34 +117,51 @@
99 117 ]
100 118 );
101 119
102 120 $this->end_controls_section();
121 +
122 + require_once KING_ADDONS_PATH . 'includes/helpers/Faceted/Style_Controls.php';
123 + Facet_Style_Controls::fields($this, '{{WRAPPER}} .ka-facet-meta__input, {{WRAPPER}} .ka-facet-meta__select, {{WRAPPER}} .ka-facet-meta__range input');
103 124 }
104 125
105 126 protected function render(): void
106 127 {
128 + if (!function_exists('king_addons_can_use_pro') || !king_addons_can_use_pro()) {
129 + if (class_exists(Woo_Context::class) && Woo_Context::is_editor()) {
130 + echo '<div class="king-addons-woo-builder-notice">' . esc_html__('Custom Field Filter is available in Pro.', 'king-addons') . '</div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
131 + }
132 + return;
133 + }
134 +
107 135 $settings = $this->get_settings_for_display();
108 - $query_id = $settings['query_id'] ?? '';
109 - $meta_key = $settings['meta_key'] ?? '';
136 + $query_id = sanitize_title($settings['query_id'] ?? '');
137 + $meta_key = sanitize_key($settings['meta_key'] ?? '');
110 138 if (empty($query_id) || empty($meta_key)) {
111 - echo '<div class="king-addons-woo-builder-notice">' . esc_html__('Set Query ID and Meta key.', 'king-addons') . '</div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
139 + if (class_exists(Woo_Context::class) && Woo_Context::is_editor()) {
140 + echo '<div class="king-addons-woo-builder-notice">' . esc_html__('Set Query ID and Meta key.', 'king-addons') . '</div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
141 + }
112 142 return;
113 143 }
114 144
115 145 $type = $settings['control_type'] ?? 'text';
116 146 $placeholder = $settings['placeholder'] ?? '';
117 - $data = ' data-ka-filters-query-id="' . esc_attr($query_id) . '" data-ka-filter-type="meta" data-ka-meta-key="' . esc_attr($meta_key) . '"';
147 + if ('_sku' === $meta_key) {
148 + $meta_label = __('SKU', 'king-addons');
149 + } else {
150 + $meta_label = ucwords(str_replace(['_', '-'], ' ', (string) preg_replace('/^ka_/', '', $meta_key)));
151 + }
152 + $shared = ' data-ka-filters-query-id="' . esc_attr($query_id) . '" data-ka-filter-type="meta" data-ka-meta-key="' . esc_attr($meta_key) . '" data-ka-meta-label="' . esc_attr($meta_label) . '"';
118 153
119 - echo '<div class="ka-facet-meta" ' . $data . '>';
154 + echo '<div class="ka-facet-meta">';
120 155 if ('text' === $type) {
121 - echo '<input type="text" class="ka-facet-meta__input" placeholder="' . esc_attr($placeholder) . '" />';
156 + echo '<input type="text" class="ka-facet-meta__input"' . $shared . ' data-ka-meta-role="equals" placeholder="' . esc_attr($placeholder) . '" />';
122 157 } elseif ('select' === $type) {
123 158 $ph = $placeholder ?: __('Any', 'king-addons');
124 - echo '<select class="ka-facet-meta__select" data-placeholder="' . esc_attr($ph) . '" data-ka-meta-key="' . esc_attr($meta_key) . '" data-ka-filters-query-id="' . esc_attr($query_id) . '"><option value="">' . esc_html($ph) . '</option></select>';
159 + echo '<select class="ka-facet-meta__select"' . $shared . ' data-ka-meta-role="equals" data-placeholder="' . esc_attr($ph) . '"><option value="">' . esc_html($ph) . '</option></select>';
125 160 } elseif ('range' === $type) {
126 161 echo '<div class="ka-facet-meta__range">';
127 - echo '<input type="number" class="ka-facet-meta__range-min" placeholder="' . esc_attr__('Min', 'king-addons') . '" />';
128 - echo '<input type="number" class="ka-facet-meta__range-max" placeholder="' . esc_attr__('Max', 'king-addons') . '" />';
162 + echo '<input type="number" class="ka-facet-meta__range-min"' . $shared . ' data-ka-meta-role="min" placeholder="' . esc_attr__('Min', 'king-addons') . '" />';
163 + echo '<input type="number" class="ka-facet-meta__range-max"' . $shared . ' data-ka-meta-role="max" placeholder="' . esc_attr__('Max', 'king-addons') . '" />';
129 164 echo '</div>';
130 165 }
131 166 echo '</div>';
132 167 }