PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.78
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.78
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 51.1.47 51.1.49 All 37 releases
king-addons / includes / widgets / TB_Back_To_Home / TB_Back_To_Home.php

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

303 lines 7.8 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 'eicon-button';
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'];
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:bug@kingaddons.com?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 'default' => esc_html__('Back to Home', 'king-addons'),
146 ]
147 );
148
149 $this->add_control(
150 'kng_destination',
151 [
152 'label' => esc_html__('Destination', 'king-addons'),
153 'type' => Controls_Manager::SELECT,
154 'default' => 'home',
155 'options' => [
156 'home' => esc_html__('Home URL', 'king-addons'),
157 'custom' => $is_pro ?
158 esc_html__('Custom URL', 'king-addons') :
159 sprintf(__('Custom URL %s', 'king-addons'), '<i class="eicon-pro-icon"></i>'),
160 ],
161 ]
162 );
163
164 $this->add_control(
165 'kng_custom_url',
166 [
167 'label' => esc_html__('Custom URL', 'king-addons'),
168 'type' => Controls_Manager::URL,
169 'placeholder' => 'https://example.com',
170 'condition' => [
171 'kng_destination' => 'custom',
172 ],
173 'classes' => $is_pro ? '' : 'king-addons-pro-control',
174 ]
175 );
176
177 $this->end_controls_section();
178 }
179
180 /**
181 * Style controls.
182 *
183 * @param bool $is_pro Whether Pro controls are enabled.
184 *
185 * @return void
186 */
187 protected function register_style_controls(bool $is_pro): void
188 {
189 $this->start_controls_section(
190 'kng_style_section',
191 [
192 'label' => esc_html__('Style', 'king-addons'),
193 'tab' => Controls_Manager::TAB_STYLE,
194 ]
195 );
196
197 $this->add_group_control(
198 Group_Control_Typography::get_type(),
199 [
200 'name' => 'kng_typography',
201 'selector' => '{{WRAPPER}} .king-addons-tb-back-to-home__button',
202 ]
203 );
204
205 $this->add_control(
206 'kng_color',
207 [
208 'label' => esc_html__('Text Color', 'king-addons'),
209 'type' => Controls_Manager::COLOR,
210 'selectors' => [
211 '{{WRAPPER}} .king-addons-tb-back-to-home__button' => 'color: {{VALUE}};',
212 ],
213 ]
214 );
215
216 $this->add_control(
217 'kng_bg',
218 [
219 'label' => esc_html__('Background', 'king-addons'),
220 'type' => Controls_Manager::COLOR,
221 'selectors' => [
222 '{{WRAPPER}} .king-addons-tb-back-to-home__button' => 'background-color: {{VALUE}};',
223 ],
224 ]
225 );
226
227 $this->add_group_control(
228 Group_Control_Border::get_type(),
229 [
230 'name' => 'kng_border',
231 'selector' => '{{WRAPPER}} .king-addons-tb-back-to-home__button',
232 ]
233 );
234
235 $this->add_group_control(
236 Group_Control_Box_Shadow::get_type(),
237 [
238 'name' => 'kng_shadow',
239 'selector' => '{{WRAPPER}} .king-addons-tb-back-to-home__button',
240 ]
241 );
242
243 $this->add_responsive_control(
244 'kng_padding',
245 [
246 'label' => esc_html__('Padding', 'king-addons'),
247 'type' => Controls_Manager::DIMENSIONS,
248 'size_units' => ['px', 'em', '%'],
249 'selectors' => [
250 '{{WRAPPER}} .king-addons-tb-back-to-home__button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
251 ],
252 ]
253 );
254
255 $this->end_controls_section();
256 }
257
258 /**
259 * Pro upsell.
260 *
261 * @return void
262 */
263 protected function register_pro_notice_controls(): void
264 {
265 if (king_addons_freemius()->can_use_premium_code__premium_only()) {
266 return;
267 }
268
269 Core::renderProFeaturesSection(
270 $this,
271 '',
272 Controls_Manager::RAW_HTML,
273 'tb-back-to-home',
274 [
275 'Custom URL destination',
276 'Icons and advanced hover styles',
277 ]
278 );
279 }
280
281 /**
282 * Render output helper.
283 *
284 * @param array<string, mixed> $settings Settings.
285 * @param bool $is_pro Pro flag.
286 *
287 * @return void
288 */
289 protected function render_output(array $settings, bool $is_pro): void
290 {
291 $label = $settings['kng_label'] ?? esc_html__('Back to Home', 'king-addons');
292 $url = home_url('/');
293
294 if ('custom' === ($settings['kng_destination'] ?? 'home') && $is_pro && !empty($settings['kng_custom_url']['url'])) {
295 $url = $settings['kng_custom_url']['url'];
296 }
297
298 echo '<div class="king-addons-tb-back-to-home">';
299 echo '<a class="king-addons-tb-back-to-home__button" href="' . esc_url($url) . '">' . esc_html($label) . '</a>';
300 echo '</div>';
301 }
302 }
303