start_controls_section( 'kng_wrapper_link_section', [ 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Wrapper Link', 'king-addons'), 'tab' => Controls_Manager::TAB_ADVANCED ] ); $element->add_control( 'kng_wrapper_link_switch', [ 'label' => esc_html__('Enable Wrapper Link', 'king-addons'), 'type' => Controls_Manager::SWITCHER ] ); $element->add_control( 'kng_wrapper_link', [ 'label' => esc_html__('Link', 'king-addons'), 'type' => Controls_Manager::URL, 'placeholder' => esc_html__('https://example.com', 'king-addons'), 'options' => [ 'url', 'is_external' ], 'condition' => [ 'kng_wrapper_link_switch!' => '' ] ] ); $element->end_controls_section(); } /** * Loads the click handler, and only for pages that actually use the feature. * * @return void */ private static function enqueueScript(): void { $handle = KING_ADDONS_ASSETS_UNIQUE_KEY . '-wrapper-link-wrapper-link'; if (!wp_script_is($handle, 'enqueued')) { wp_enqueue_script($handle); } } public static function renderLink(Element_Base $element): void { if (!empty($element->get_settings_for_display('kng_wrapper_link_switch'))) { $wrapper_link_settings = $element->get_settings_for_display('kng_wrapper_link'); if (!empty($wrapper_link_settings['url'])) { $url = esc_url_raw($wrapper_link_settings['url']); if (empty($url)) { return; } $link_target = (!empty($wrapper_link_settings['is_external'])) ? '_blank' : '_self'; /** * The URL travels in a data attribute and the click is handled by * wrapper-link.js. An inline onclick fired on every click that * bubbled up, so a link inside the container navigated twice — * once itself and once through the wrapper. */ $element->add_render_attribute( '_wrapper', [ 'style' => 'cursor: pointer;', 'data-kng-wrapper-link' => $url, 'data-kng-wrapper-link-target' => $link_target, ] ); self::enqueueScript(); } } } }