← All changes
|
includes/features/Wrapper_Link/Wrapper_Link.php
+30
-2
51.1.44
→
51.1.83
View file →
| @@ -67,8 +67,22 @@ | ||
| 67 | 67 | |
| 68 | 68 | $element->end_controls_section(); |
| 69 | 69 | } |
| 70 | 70 | |
| 71 | + /** | |
| 72 | + * Loads the click handler, and only for pages that actually use the feature. | |
| 73 | + * | |
| 74 | + * @return void | |
| 75 | + */ | |
| 76 | + private static function enqueueScript(): void | |
| 77 | + { | |
| 78 | + $handle = KING_ADDONS_ASSETS_UNIQUE_KEY . '-wrapper-link-wrapper-link'; | |
| 79 | + | |
| 80 | + if (!wp_script_is($handle, 'enqueued')) { | |
| 81 | + wp_enqueue_script($handle); | |
| 82 | + } | |
| 83 | + } | |
| 84 | + | |
| 71 | 85 | public static function renderLink(Element_Base $element): void |
| 72 | 86 | { |
| 73 | 87 | if (!empty($element->get_settings_for_display('kng_wrapper_link_switch'))) { |
| 74 | 88 | |
| @@ -75,17 +89,31 @@ | ||
| 75 | 89 | $wrapper_link_settings = $element->get_settings_for_display('kng_wrapper_link'); |
| 76 | 90 | |
| 77 | 91 | if (!empty($wrapper_link_settings['url'])) { |
| 78 | 92 | |
| 79 | - $link_target = ($wrapper_link_settings['is_external']) ? '_blank' : '_self'; | |
| 93 | + $url = esc_url_raw($wrapper_link_settings['url']); | |
| 94 | + if (empty($url)) { | |
| 95 | + return; | |
| 96 | + } | |
| 80 | 97 | |
| 98 | + $link_target = (!empty($wrapper_link_settings['is_external'])) ? '_blank' : '_self'; | |
| 99 | + | |
| 100 | + /** | |
| 101 | + * The URL travels in a data attribute and the click is handled by | |
| 102 | + * wrapper-link.js. An inline onclick fired on every click that | |
| 103 | + * bubbled up, so a link inside the container navigated twice — | |
| 104 | + * once itself and once through the wrapper. | |
| 105 | + */ | |
| 81 | 106 | $element->add_render_attribute( |
| 82 | 107 | '_wrapper', |
| 83 | 108 | [ |
| 84 | 109 | 'style' => 'cursor: pointer;', |
| 85 | - 'onclick' => "window.open('" . esc_url($wrapper_link_settings['url']) . "', '" . esc_attr($link_target) . "');" | |
| 110 | + 'data-kng-wrapper-link' => $url, | |
| 111 | + 'data-kng-wrapper-link-target' => $link_target, | |
| 86 | 112 | ] |
| 87 | 113 | ); |
| 114 | + | |
| 115 | + self::enqueueScript(); | |
| 88 | 116 | } |
| 89 | 117 | } |
| 90 | 118 | } |
| 91 | 119 | } |