Changeset 3649305
- Timestamp:
- 08/16/2026 05:57:49 AM (2 months ago)
- Location:
- avd-cta-insights
- Files:
-
- 2 deleted
- 4 edited
- 1 copied
-
tags/4.0.0.17 (copied) (copied from avd-cta-insights/trunk )
-
tags/4.0.0.17/includes/admin/services/class-template-manager (deleted)
-
tags/4.0.0.17/includes/admin/services/class-template-manager.php (modified) (5 diffs)
-
tags/4.0.0.17/readme.txt (modified) (2 diffs)
-
trunk/includes/admin/services/class-template-manager (deleted)
-
trunk/includes/admin/services/class-template-manager.php (modified) (5 diffs)
-
trunk/readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
avd-cta-insights/tags/4.0.0.17/includes/admin/services/class-template-manager.php
r3627645 r3649305 7 7 final class AVDCTAI_Template_Manager { 8 8 9 /* 10 * Bestaande optionnaam bewust behouden. 11 * Zo blijven eerder opgeslagen CTA-templates beschikbaar. 12 */ 13 const OPTION_TEMPLATES = 'avd_uber_cta_templates'; 9 private const OPTION_TEMPLATES = 'avdctai_templates'; 10 private const LEGACY_OPTION_TEMPLATES = 'avd_uber_cta_templates'; 14 11 15 12 public static function get_templates(): array { 16 $saved = get_option( 17 self::OPTION_TEMPLATES, 18 array() 19 ); 13 $saved = get_option(self::OPTION_TEMPLATES, null); 20 14 21 15 if (!is_array($saved)) { 22 $saved = array(); 16 $legacy = get_option(self::LEGACY_OPTION_TEMPLATES, array()); 17 18 if (is_array($legacy) && !empty($legacy)) { 19 $saved = $legacy; 20 update_option(self::OPTION_TEMPLATES, $saved, false); 21 } else { 22 $saved = array(); 23 } 23 24 } 24 25 25 return wp_parse_args( 26 $saved, 27 self::defaults() 28 ); 26 return self::merge_templates($saved); 29 27 } 30 28 … … 33 31 $templates = self::get_templates(); 34 32 35 if ( 36 $intent === '' || 37 !isset($templates[$intent]) || 38 !is_array($templates[$intent]) 39 ) { 33 if ($intent === '' || !isset($templates[$intent]) || !is_array($templates[$intent])) { 40 34 return self::default_template(); 41 35 } 42 36 43 return wp_parse_args( 44 $templates[$intent], 45 self::default_template() 46 ); 37 return wp_parse_args($templates[$intent], self::default_template()); 47 38 } 48 39 … … 57 48 $clean[$intent] = array( 58 49 'title' => isset($intent_input['title']) 59 ? sanitize_text_field( 60 wp_unslash($intent_input['title']) 61 ) 50 ? sanitize_text_field(wp_unslash((string) $intent_input['title'])) 62 51 : $default['title'], 63 64 52 'text' => isset($intent_input['text']) 65 ? sanitize_textarea_field( 66 wp_unslash($intent_input['text']) 67 ) 53 ? sanitize_textarea_field(wp_unslash((string) $intent_input['text'])) 68 54 : $default['text'], 69 70 55 'button' => isset($intent_input['button']) 71 ? sanitize_text_field( 72 wp_unslash($intent_input['button']) 73 ) 56 ? sanitize_text_field(wp_unslash((string) $intent_input['button'])) 74 57 : $default['button'], 75 76 58 'url' => isset($intent_input['url']) 77 ? esc_url_raw( 78 wp_unslash($intent_input['url']) 79 ) 59 ? esc_url_raw(wp_unslash((string) $intent_input['url'])) 80 60 : $default['url'], 81 82 'enabled' => !empty($intent_input['enabled']) 83 ? 1 84 : 0, 61 'enabled' => !empty($intent_input['enabled']) ? 1 : 0, 85 62 ); 86 63 } 87 64 88 update_option( 89 self::OPTION_TEMPLATES, 90 $clean, 91 false 92 ); 65 update_option(self::OPTION_TEMPLATES, $clean, false); 93 66 } 94 67 95 68 public static function defaults(): array { 96 69 return array( 97 'homepage_intent' => array( 98 'title' => 'Wat wil je bereiken?', 99 'text' => 'Kies direct de route die het beste past bij je bezoek.', 100 'button' => 'Bekijk de beste optie', 101 'url' => home_url('/'), 102 'enabled' => 1, 70 'homepage_intent' => self::template( 71 'Wat wil je dat bezoekers hier doen?', 72 'Kies één duidelijke vervolgstap die past bij het doel van deze pagina.', 73 'Bekijk vervolgstap' 103 74 ), 104 105 'phone_intent' => array( 106 'title' => 'Bellen lukt niet?', 107 'text' => 'Probeer een alternatieve route of maak het makkelijker voor bezoekers om direct contact op te nemen.', 108 'button' => 'Probeer direct', 109 'url' => home_url('/contact/'), 110 'enabled' => 1, 75 'phone_intent' => self::template( 76 'Maak contact opnemen eenvoudiger', 77 'Bied bezoekers een duidelijke bel-, chat- of contactoptie.', 78 'Neem contact op' 111 79 ), 112 113 'contact_problem_intent' => array( 114 'title' => 'Kom je er niet doorheen?', 115 'text' => 'Help bezoekers sneller naar de juiste contactroute.', 116 'button' => 'Bekijk hulpopties', 117 'url' => home_url('/contact/'), 118 'enabled' => 1, 80 'contact_problem_intent' => self::template( 81 'Help bezoekers verder', 82 'Bied een alternatieve route wanneer de huidige contactstap niet duidelijk genoeg is.', 83 'Bekijk contactopties' 119 84 ), 120 121 'business_service_intent' => array( 122 'title' => 'Meer aanvragen uit je website?', 123 'text' => 'Laat bezoekers laagdrempelig een scan, adviesgesprek of offerte aanvragen.', 124 'button' => 'Vraag advies aan', 125 'url' => home_url('/contact/'), 126 'enabled' => 1, 85 'business_service_intent' => self::template( 86 'Maak de volgende stap duidelijk', 87 'Gebruik een concrete actie zoals een aanvraag, offerte, afspraak of kennismaking.', 88 'Bekijk mogelijkheden' 127 89 ), 128 129 'plugin_intent' => array( 130 'title' => 'Verbeter je WordPress-conversie', 131 'text' => 'Laat zien welke pagina’s bezoekers krijgen en welke CTA’s beter kunnen.', 132 'button' => 'Download of vraag hulp', 133 'url' => home_url('/'), 134 'enabled' => 1, 90 'plugin_intent' => self::template( 91 'Maak interesse meetbaar', 92 'Koppel deze pagina aan een concrete vervolgstap die je kunt meten.', 93 'Ga verder' 135 94 ), 136 137 'pricing_intent' => array( 138 'title' => 'Twijfel je over de kosten?', 139 'text' => 'Maak het makkelijk om eerst vrijblijvend contact op te nemen.', 140 'button' => 'Laat gratis meekijken', 141 'url' => home_url('/contact/'), 142 'enabled' => 1, 95 'pricing_intent' => self::template( 96 'Verlaag twijfel rond de volgende stap', 97 'Geef bezoekers een laagdrempelige manier om vragen te stellen voordat ze beslissen.', 98 'Stel een vraag' 143 99 ), 144 145 'category_or_tag_intent' => array( 146 'title' => 'Zoek je de juiste pagina?', 147 'text' => 'Help bezoekers snel naar de belangrijkste vervolgstappen.', 148 'button' => 'Bekijk hulpopties', 149 'url' => home_url('/'), 150 'enabled' => 1, 100 'category_or_tag_intent' => self::template( 101 'Wijs bezoekers de juiste route', 102 'Gebruik deze pagina om bezoekers naar de meest relevante vervolgstap te sturen.', 103 'Bekijk vervolgstap' 151 104 ), 152 153 'content_intent' => array( 154 'title' => 'Hulp nodig met dit onderwerp?', 155 'text' => 'Voeg een logische vervolgstap toe die past bij de inhoud van de pagina.', 156 'button' => 'Bekijk mogelijkheden', 157 'url' => home_url('/contact/'), 158 'enabled' => 1, 105 'content_intent' => self::template( 106 'Voeg een logische vervolgstap toe', 107 'Laat de CTA aansluiten op het onderwerp en de intentie van de pagina.', 108 'Bekijk mogelijkheden' 159 109 ), 160 110 ); … … 174 124 return array( 175 125 'homepage_intent' => 'Homepage / algemene instap', 176 'phone_intent' => ' Belintentie',177 'contact_problem_intent' => 'Contact - of bereikbaarheidsprobleem',178 'business_service_intent' => ' Zakelijke dienstinteresse',179 'plugin_intent' => 'P lugin- of WordPress-interesse',126 'phone_intent' => 'Contactintentie', 127 'contact_problem_intent' => 'Contactprobleem', 128 'business_service_intent' => 'Dienst- of aanvraagintentie', 129 'plugin_intent' => 'Product- of toolinteresse', 180 130 'pricing_intent' => 'Prijsinteresse', 181 131 'category_or_tag_intent' => 'Routepagina', … … 183 133 ); 184 134 } 135 136 private static function template(string $title, string $text, string $button): array { 137 return array( 138 'title' => $title, 139 'text' => $text, 140 'button' => $button, 141 'url' => '', 142 'enabled' => 0, 143 ); 144 } 145 146 private static function merge_templates(array $saved): array { 147 $templates = array(); 148 149 foreach (self::defaults() as $intent => $default) { 150 $value = isset($saved[$intent]) && is_array($saved[$intent]) 151 ? $saved[$intent] 152 : array(); 153 154 $templates[$intent] = wp_parse_args($value, $default); 155 } 156 157 return $templates; 158 } 185 159 } -
avd-cta-insights/tags/4.0.0.17/readme.txt
r3627645 r3649305 5 5 Tested up to: 7.0 6 6 Requires PHP: 8.0 7 Stable tag: 4.0.0.1 37 Stable tag: 4.0.0.15 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 55 55 == Changelog == 56 56 57 = 4.0.0.15 = 58 * Made frontend tracking and dashboard integration more robust. 59 * Removed hardcoded site-specific contact details from the default plugin configuration. 60 * Added configurable CTA, phone and WhatsApp settings. 61 * Improved dashboard, settings, asset loading and WordPress.org deployment compatibility. 62 57 63 = 4.0.0.13 = 58 64 * Eerste officiële release van AVD CTA Insights. -
avd-cta-insights/trunk/includes/admin/services/class-template-manager.php
r3627645 r3649305 7 7 final class AVDCTAI_Template_Manager { 8 8 9 /* 10 * Bestaande optionnaam bewust behouden. 11 * Zo blijven eerder opgeslagen CTA-templates beschikbaar. 12 */ 13 const OPTION_TEMPLATES = 'avd_uber_cta_templates'; 9 private const OPTION_TEMPLATES = 'avdctai_templates'; 10 private const LEGACY_OPTION_TEMPLATES = 'avd_uber_cta_templates'; 14 11 15 12 public static function get_templates(): array { 16 $saved = get_option( 17 self::OPTION_TEMPLATES, 18 array() 19 ); 13 $saved = get_option(self::OPTION_TEMPLATES, null); 20 14 21 15 if (!is_array($saved)) { 22 $saved = array(); 16 $legacy = get_option(self::LEGACY_OPTION_TEMPLATES, array()); 17 18 if (is_array($legacy) && !empty($legacy)) { 19 $saved = $legacy; 20 update_option(self::OPTION_TEMPLATES, $saved, false); 21 } else { 22 $saved = array(); 23 } 23 24 } 24 25 25 return wp_parse_args( 26 $saved, 27 self::defaults() 28 ); 26 return self::merge_templates($saved); 29 27 } 30 28 … … 33 31 $templates = self::get_templates(); 34 32 35 if ( 36 $intent === '' || 37 !isset($templates[$intent]) || 38 !is_array($templates[$intent]) 39 ) { 33 if ($intent === '' || !isset($templates[$intent]) || !is_array($templates[$intent])) { 40 34 return self::default_template(); 41 35 } 42 36 43 return wp_parse_args( 44 $templates[$intent], 45 self::default_template() 46 ); 37 return wp_parse_args($templates[$intent], self::default_template()); 47 38 } 48 39 … … 57 48 $clean[$intent] = array( 58 49 'title' => isset($intent_input['title']) 59 ? sanitize_text_field( 60 wp_unslash($intent_input['title']) 61 ) 50 ? sanitize_text_field(wp_unslash((string) $intent_input['title'])) 62 51 : $default['title'], 63 64 52 'text' => isset($intent_input['text']) 65 ? sanitize_textarea_field( 66 wp_unslash($intent_input['text']) 67 ) 53 ? sanitize_textarea_field(wp_unslash((string) $intent_input['text'])) 68 54 : $default['text'], 69 70 55 'button' => isset($intent_input['button']) 71 ? sanitize_text_field( 72 wp_unslash($intent_input['button']) 73 ) 56 ? sanitize_text_field(wp_unslash((string) $intent_input['button'])) 74 57 : $default['button'], 75 76 58 'url' => isset($intent_input['url']) 77 ? esc_url_raw( 78 wp_unslash($intent_input['url']) 79 ) 59 ? esc_url_raw(wp_unslash((string) $intent_input['url'])) 80 60 : $default['url'], 81 82 'enabled' => !empty($intent_input['enabled']) 83 ? 1 84 : 0, 61 'enabled' => !empty($intent_input['enabled']) ? 1 : 0, 85 62 ); 86 63 } 87 64 88 update_option( 89 self::OPTION_TEMPLATES, 90 $clean, 91 false 92 ); 65 update_option(self::OPTION_TEMPLATES, $clean, false); 93 66 } 94 67 95 68 public static function defaults(): array { 96 69 return array( 97 'homepage_intent' => array( 98 'title' => 'Wat wil je bereiken?', 99 'text' => 'Kies direct de route die het beste past bij je bezoek.', 100 'button' => 'Bekijk de beste optie', 101 'url' => home_url('/'), 102 'enabled' => 1, 70 'homepage_intent' => self::template( 71 'Wat wil je dat bezoekers hier doen?', 72 'Kies één duidelijke vervolgstap die past bij het doel van deze pagina.', 73 'Bekijk vervolgstap' 103 74 ), 104 105 'phone_intent' => array( 106 'title' => 'Bellen lukt niet?', 107 'text' => 'Probeer een alternatieve route of maak het makkelijker voor bezoekers om direct contact op te nemen.', 108 'button' => 'Probeer direct', 109 'url' => home_url('/contact/'), 110 'enabled' => 1, 75 'phone_intent' => self::template( 76 'Maak contact opnemen eenvoudiger', 77 'Bied bezoekers een duidelijke bel-, chat- of contactoptie.', 78 'Neem contact op' 111 79 ), 112 113 'contact_problem_intent' => array( 114 'title' => 'Kom je er niet doorheen?', 115 'text' => 'Help bezoekers sneller naar de juiste contactroute.', 116 'button' => 'Bekijk hulpopties', 117 'url' => home_url('/contact/'), 118 'enabled' => 1, 80 'contact_problem_intent' => self::template( 81 'Help bezoekers verder', 82 'Bied een alternatieve route wanneer de huidige contactstap niet duidelijk genoeg is.', 83 'Bekijk contactopties' 119 84 ), 120 121 'business_service_intent' => array( 122 'title' => 'Meer aanvragen uit je website?', 123 'text' => 'Laat bezoekers laagdrempelig een scan, adviesgesprek of offerte aanvragen.', 124 'button' => 'Vraag advies aan', 125 'url' => home_url('/contact/'), 126 'enabled' => 1, 85 'business_service_intent' => self::template( 86 'Maak de volgende stap duidelijk', 87 'Gebruik een concrete actie zoals een aanvraag, offerte, afspraak of kennismaking.', 88 'Bekijk mogelijkheden' 127 89 ), 128 129 'plugin_intent' => array( 130 'title' => 'Verbeter je WordPress-conversie', 131 'text' => 'Laat zien welke pagina’s bezoekers krijgen en welke CTA’s beter kunnen.', 132 'button' => 'Download of vraag hulp', 133 'url' => home_url('/'), 134 'enabled' => 1, 90 'plugin_intent' => self::template( 91 'Maak interesse meetbaar', 92 'Koppel deze pagina aan een concrete vervolgstap die je kunt meten.', 93 'Ga verder' 135 94 ), 136 137 'pricing_intent' => array( 138 'title' => 'Twijfel je over de kosten?', 139 'text' => 'Maak het makkelijk om eerst vrijblijvend contact op te nemen.', 140 'button' => 'Laat gratis meekijken', 141 'url' => home_url('/contact/'), 142 'enabled' => 1, 95 'pricing_intent' => self::template( 96 'Verlaag twijfel rond de volgende stap', 97 'Geef bezoekers een laagdrempelige manier om vragen te stellen voordat ze beslissen.', 98 'Stel een vraag' 143 99 ), 144 145 'category_or_tag_intent' => array( 146 'title' => 'Zoek je de juiste pagina?', 147 'text' => 'Help bezoekers snel naar de belangrijkste vervolgstappen.', 148 'button' => 'Bekijk hulpopties', 149 'url' => home_url('/'), 150 'enabled' => 1, 100 'category_or_tag_intent' => self::template( 101 'Wijs bezoekers de juiste route', 102 'Gebruik deze pagina om bezoekers naar de meest relevante vervolgstap te sturen.', 103 'Bekijk vervolgstap' 151 104 ), 152 153 'content_intent' => array( 154 'title' => 'Hulp nodig met dit onderwerp?', 155 'text' => 'Voeg een logische vervolgstap toe die past bij de inhoud van de pagina.', 156 'button' => 'Bekijk mogelijkheden', 157 'url' => home_url('/contact/'), 158 'enabled' => 1, 105 'content_intent' => self::template( 106 'Voeg een logische vervolgstap toe', 107 'Laat de CTA aansluiten op het onderwerp en de intentie van de pagina.', 108 'Bekijk mogelijkheden' 159 109 ), 160 110 ); … … 174 124 return array( 175 125 'homepage_intent' => 'Homepage / algemene instap', 176 'phone_intent' => ' Belintentie',177 'contact_problem_intent' => 'Contact - of bereikbaarheidsprobleem',178 'business_service_intent' => ' Zakelijke dienstinteresse',179 'plugin_intent' => 'P lugin- of WordPress-interesse',126 'phone_intent' => 'Contactintentie', 127 'contact_problem_intent' => 'Contactprobleem', 128 'business_service_intent' => 'Dienst- of aanvraagintentie', 129 'plugin_intent' => 'Product- of toolinteresse', 180 130 'pricing_intent' => 'Prijsinteresse', 181 131 'category_or_tag_intent' => 'Routepagina', … … 183 133 ); 184 134 } 135 136 private static function template(string $title, string $text, string $button): array { 137 return array( 138 'title' => $title, 139 'text' => $text, 140 'button' => $button, 141 'url' => '', 142 'enabled' => 0, 143 ); 144 } 145 146 private static function merge_templates(array $saved): array { 147 $templates = array(); 148 149 foreach (self::defaults() as $intent => $default) { 150 $value = isset($saved[$intent]) && is_array($saved[$intent]) 151 ? $saved[$intent] 152 : array(); 153 154 $templates[$intent] = wp_parse_args($value, $default); 155 } 156 157 return $templates; 158 } 185 159 } -
avd-cta-insights/trunk/readme.txt
r3627645 r3649305 5 5 Tested up to: 7.0 6 6 Requires PHP: 8.0 7 Stable tag: 4.0.0.1 37 Stable tag: 4.0.0.15 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 55 55 == Changelog == 56 56 57 = 4.0.0.15 = 58 * Made frontend tracking and dashboard integration more robust. 59 * Removed hardcoded site-specific contact details from the default plugin configuration. 60 * Added configurable CTA, phone and WhatsApp settings. 61 * Improved dashboard, settings, asset loading and WordPress.org deployment compatibility. 62 57 63 = 4.0.0.13 = 58 64 * Eerste officiële release van AVD CTA Insights.
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)