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
king-addons / includes / widgets / TB_Back_To_Home / TB_Back_To_Home.php

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

305 lines 7.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Theme Builder Back to Home widget (Free).
4 *
5 * @package King_Addons
6 */
7
8 namespace King_Addons;
9
10 use Elementor\Controls_Manager;
11 use Elementor\Group_Control_Border;
12 use Elementor\Group_Control_Box_Shadow;
13 use Elementor\Group_Control_Typography;
14 use Elementor\Widget_Base;
15
16 if (!defined('ABSPATH')) {
17 exit;
18 }
19
20 /**
21 * Renders a CTA button linking to the homepage.
22 */
23 class TB_Back_To_Home extends Widget_Base
24 {
25 /**
26 * Widget slug.
27 *
28 * @return string
29 */
30 public function get_name(): string
31 {
32 return 'king-addons-tb-back-to-home';
33 }
34
35 /**
36 * Widget title.
37 *
38 * @return string
39 */
40 public function get_title(): string
41 {
42 return esc_html__('TB - Back to Home', 'king-addons');
43 }
44
45 /**
46 * Widget icon.
47 *
48 * @return string
49 */
50 public function get_icon(): string
51 {
52 return 'king-addons-icon king-addons-tb-back-to-home';
53 }
54
55 /**
56 * Style dependencies.
57 *
58 * @return array<int, string>
59 */
60 public function get_style_depends(): array
61 {
62 return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-tb-back-to-home-style'];
63 }
64
65 /**
66 * Script dependencies.
67 *
68 * @return array<int, string>
69 */
70 public function get_script_depends(): array
71 {
72 return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-tb-back-to-home-script'];
73 }
74
75 /**
76 * Categories.
77 *
78 * @return array<int, string>
79 */
80 public function get_categories(): array
81 {
82 return ['king-addons-theme-builder'];
83 }
84
85 /**
86 * Keywords.
87 *
88 * @return array<int, string>
89 */
90 public function get_keywords(): array
91 {
92 return ['404', 'button', 'home', 'cta', 'king-addons'];
93 }
94
95 public function get_custom_help_url()
96 {
97 return 'mailto:[email protected]?subject=Bug Report - King Addons&body=Please describe the issue';
98 }
99
100 /**
101 * Register controls.
102 *
103 * @return void
104 */
105 public function register_controls(): void
106 {
107 $this->register_content_controls(false);
108 $this->register_style_controls(false);
109 $this->register_pro_notice_controls();
110 }
111
112 /**
113 * Render output.
114 *
115 * @return void
116 */
117 public function render(): void
118 {
119 $settings = $this->get_settings_for_display();
120 $this->render_output($settings, false);
121 }
122
123 /**
124 * Content controls.
125 *
126 * @param bool $is_pro Whether Pro controls are enabled.
127 *
128 * @return void
129 */
130 protected function register_content_controls(bool $is_pro): void
131 {
132 $this->start_controls_section(
133 'kng_content_section',
134 [
135 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Content', 'king-addons'),
136 'tab' => Controls_Manager::TAB_CONTENT,
137 ]
138 );
139
140 $this->add_control(
141 'kng_label',
142 [
143 'label' => esc_html__('Label', 'king-addons'),
144 'type' => Controls_Manager::TEXT,
145 'dynamic' => ['active' => true],
146 'default' => esc_html__('Back to Home', 'king-addons'),
147 ]
148 );
149
150 $this->add_control(
151 'kng_destination',
152 [
153 'label' => esc_html__('Destination', 'king-addons'),
154 'type' => Controls_Manager::SELECT,
155 'default' => 'home',
156 'options' => [
157 'home' => esc_html__('Home URL', 'king-addons'),
158 'custom' => $is_pro ?
159 esc_html__('Custom URL', 'king-addons') :
160 sprintf(__('Custom URL %s', 'king-addons'), '<i class="eicon-pro-icon"></i>'),
161 ],
162 ]
163 );
164
165 $this->add_control(
166 'kng_custom_url',
167 [
168 'label' => esc_html__('Custom URL', 'king-addons'),
169 'type' => Controls_Manager::URL,
170 'dynamic' => ['active' => true],
171 'placeholder' => 'https://example.com',
172 'condition' => [
173 'kng_destination' => 'custom',
174 ],
175 'classes' => $is_pro ? '' : 'king-addons-pro-control',
176 ]
177 );
178
179 $this->end_controls_section();
180 }
181
182 /**
183 * Style controls.
184 *
185 * @param bool $is_pro Whether Pro controls are enabled.
186 *
187 * @return void
188 */
189 protected function register_style_controls(bool $is_pro): void
190 {
191 $this->start_controls_section(
192 'kng_style_section',
193 [
194 'label' => esc_html__('Style', 'king-addons'),
195 'tab' => Controls_Manager::TAB_STYLE,
196 ]
197 );
198
199 $this->add_group_control(
200 Group_Control_Typography::get_type(),
201 [
202 'name' => 'kng_typography',
203 'selector' => '{{WRAPPER}} .king-addons-tb-back-to-home__button',
204 ]
205 );
206
207 $this->add_control(
208 'kng_color',
209 [
210 'label' => esc_html__('Text Color', 'king-addons'),
211 'type' => Controls_Manager::COLOR,
212 'selectors' => [
213 '{{WRAPPER}} .king-addons-tb-back-to-home__button' => 'color: {{VALUE}};',
214 ],
215 ]
216 );
217
218 $this->add_control(
219 'kng_bg',
220 [
221 'label' => esc_html__('Background', 'king-addons'),
222 'type' => Controls_Manager::COLOR,
223 'selectors' => [
224 '{{WRAPPER}} .king-addons-tb-back-to-home__button' => 'background-color: {{VALUE}};',
225 ],
226 ]
227 );
228
229 $this->add_group_control(
230 Group_Control_Border::get_type(),
231 [
232 'name' => 'kng_border',
233 'selector' => '{{WRAPPER}} .king-addons-tb-back-to-home__button',
234 ]
235 );
236
237 $this->add_group_control(
238 Group_Control_Box_Shadow::get_type(),
239 [
240 'name' => 'kng_shadow',
241 'selector' => '{{WRAPPER}} .king-addons-tb-back-to-home__button',
242 ]
243 );
244
245 $this->add_responsive_control(
246 'kng_padding',
247 [
248 'label' => esc_html__('Padding', 'king-addons'),
249 'type' => Controls_Manager::DIMENSIONS,
250 'size_units' => ['px', 'em', '%'],
251 'selectors' => [
252 '{{WRAPPER}} .king-addons-tb-back-to-home__button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
253 ],
254 ]
255 );
256
257 $this->end_controls_section();
258 }
259
260 /**
261 * Pro upsell.
262 *
263 * @return void
264 */
265 protected function register_pro_notice_controls(): void
266 {
267 if (king_addons_freemius()->can_use_premium_code__premium_only()) {
268 return;
269 }
270
271 Core::renderProFeaturesSection(
272 $this,
273 '',
274 Controls_Manager::RAW_HTML,
275 'tb-back-to-home',
276 [
277 'Custom URL destination',
278 'Icons and advanced hover styles',
279 ]
280 );
281 }
282
283 /**
284 * Render output helper.
285 *
286 * @param array<string, mixed> $settings Settings.
287 * @param bool $is_pro Pro flag.
288 *
289 * @return void
290 */
291 protected function render_output(array $settings, bool $is_pro): void
292 {
293 $label = $settings['kng_label'] ?? esc_html__('Back to Home', 'king-addons');
294 $url = home_url('/');
295
296 if ('custom' === ($settings['kng_destination'] ?? 'home') && $is_pro && !empty($settings['kng_custom_url']['url'])) {
297 $url = $settings['kng_custom_url']['url'];
298 }
299
300 echo '<div class="king-addons-tb-back-to-home">';
301 echo '<a class="king-addons-tb-back-to-home__button" href="' . esc_url($url) . '">' . esc_html($label) . '</a>';
302 echo '</div>';
303 }
304 }
305