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 +39 -12 51.1.63 → 51.1.86 View file →
@@ -26,14 +26,24 @@
26 26 }
27 27
28 28 public function get_title(): string
29 29 {
30 - return esc_html__('Facet Meta/ACF', 'king-addons');
30 + return esc_html__('Custom Field Filter', 'king-addons');
31 31 }
32 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 +
33 43 public function get_icon(): string
34 44 {
35 - return 'eicon-filter';
45 + return 'king-addons-icon king-addons-facet-meta';
36 46 }
37 47
38 48 public function get_categories(): array
39 49 {
@@ -64,14 +74,16 @@
64 74 'tab' => Controls_Manager::TAB_CONTENT,
65 75 ]
66 76 );
67 77
78 + Core::renderUpgradeProSection($this, Controls_Manager::RAW_HTML, 'facet-meta', 'facet_meta_pro_notice');
79 +
68 80 $this->add_control(
69 81 'query_id',
70 82 [
71 - 'label' => esc_html__('Query ID', 'king-addons'),
83 + 'label' => esc_html__('Shop Filters ID', 'king-addons'),
72 84 'type' => Controls_Manager::TEXT,
73 - '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'),
74 86 ]
75 87 );
76 88
77 89 $this->add_control(
@@ -105,15 +117,25 @@
105 117 ]
106 118 );
107 119
108 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');
109 124 }
110 125
111 126 protected function render(): void
112 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 +
113 135 $settings = $this->get_settings_for_display();
114 - $query_id = $settings['query_id'] ?? '';
115 - $meta_key = $settings['meta_key'] ?? '';
136 + $query_id = sanitize_title($settings['query_id'] ?? '');
137 + $meta_key = sanitize_key($settings['meta_key'] ?? '');
116 138 if (empty($query_id) || empty($meta_key)) {
117 139 if (class_exists(Woo_Context::class) && Woo_Context::is_editor()) {
118 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
119 141 }
@@ -121,20 +143,25 @@
121 143 }
122 144
123 145 $type = $settings['control_type'] ?? 'text';
124 146 $placeholder = $settings['placeholder'] ?? '';
125 - $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) . '"';
126 153
127 - echo '<div class="ka-facet-meta" ' . $data . '>';
154 + echo '<div class="ka-facet-meta">';
128 155 if ('text' === $type) {
129 - 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) . '" />';
130 157 } elseif ('select' === $type) {
131 158 $ph = $placeholder ?: __('Any', 'king-addons');
132 - 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>';
133 160 } elseif ('range' === $type) {
134 161 echo '<div class="ka-facet-meta__range">';
135 - echo '<input type="number" class="ka-facet-meta__range-min" placeholder="' . esc_attr__('Min', 'king-addons') . '" />';
136 - 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') . '" />';
137 164 echo '</div>';
138 165 }
139 166 echo '</div>';
140 167 }