Een aangepaste integratie bouwen, de weergave van de wishlist-knop wijzigen, of reageren wanneer een klant een product opslaat? SaveTo Wishlist biedt WordPress-filters en -acties voor elk van deze taken, plus een REST API voor het lezen en wijzigen van wishlists. Dit artikel somt de hooks en routes op die worden meegeleverd met SaveTo Wishlist Lite 1.1.8, met de argumenten die elk ontvangt en een werkend voorbeeld voor de veelvoorkomende gevallen.
Voordat u begint
- Je hebt SaveTo Wishlist Lite en WooCommerce actief op de site nodig. SaveTo Wishlist Pro en Registry voegen hun eigen hooks toe, die hier niet worden behandeld.
- Elke hooknaam begint met
stwlite_. - Plaats je code in een kleine aangepaste plugin of een code-snippets plugin. Voeg plaatsingsfilters (zie hieronder) toe in een pluginbestand, niet in het
functions.php-bestand van een thema. - Elke hook en route in dit artikel bestaat in SaveTo Wishlist Lite 1.1.8. Een hook die hier niet wordt vermeld, maakt geen deel uit van het openbare oppervlak, dus vertrouw er niet op.
Hooks
Elke hook hieronder vermeldt het type, de argumenten die het ontvangt en wat het doet. Wanneer je een callback registreert die meer dan één argument neemt, geef dan het aantal argumenten door als de vierde parameter van add_filter() of add_action(), zoals de voorbeelden laten zien.
Knopuitvoer
Deze filters wijzigen de markup van de wishlist-knop voordat deze wordt afgedrukt. De plugin stuurt de definitieve markup door wp_kses(), dus tags en attributen buiten de toegestane lijst worden verwijderd. Om meer tags toe te staan, gebruik je de stwlite_allowed_button_html filter, die de toegestane lijst array ontvangt.
| Hook | Type | Argumenten | Wat het doet |
|---|---|---|---|
stwlite_wishlist_button_html | Filter | $button_html, $product, $placement, $style, $button_label | Filtert de markup van elke wishlist-knop die de plugin bouwt. Het wordt uitgevoerd, zelfs als de knop verborgen is, in welk geval $button_html een lege string is. |
stwlite_wishlist_button_shop_html | Filter | $button_html, $product, $placement, $style, $color_options | Filtert de knop op winkel- en archiefpagina's. |
stwlite_wishlist_button_product_html | Filter | $button_html, $product, $placement, $style, $color_options | Filtert de knop op individuele productpagina's. Als je callback een lege string retourneert, wordt er geen knop weergegeven. |
stwlite_wishlist_cart_button_html | Filter | $button_html | Filtert de winkelwagenpagina-knop die de hele winkelwagen opslaat. |
stwlite_wishlist_button_cart_item_html | Filter | $button_html, $product, $style, $color_options | Filtert de per-item knop in de winkelwagen. |
stwlite_wishlist_button_show_button | Filter | $show (standaard true), $product | Geef false terug om de knop voor een product te verbergen. |
stwlite_wishlist_button_allow_product_multiple_lists | Filter | $allow (standaard true), $product | Geef false terug om de "Lijst kiezen" vervolgkeuzelijst van de knop te verwijderen. |
stwlite_before_wishlist_button_shop_page, stwlite_after_wishlist_button_shop_page | Actie | Geen | Wordt afgedrukt voor en na de knop op de winkelpagina. |
stwlite_allowed_button_html | Filter | $allowed_html | Filtert de toegestane lijst van wp_kses() voor knopmarkup. |
Dit voorbeeld voegt een korte notitie toe na de knop voor producten in de uitverkoop:
add_filter( 'stwlite_wishlist_button_html', function ( $button_html, $product, $placement, $style, $button_label ) {
if ( '' === $button_html || ! $product instanceof WC_Product || ! $product->is_on_sale() ) {
return $button_html;
}
return $button_html . '<span class="my-sale-note">On sale</span>';
}, 10, 5 );
Knop plaatsing, stijl en labels
Deze filters veranderen waar de knop verschijnt en hoe deze eruitziet. Elk ontvangt de opgeslagen instelling en retourneert de te gebruiken waarde.
| Hook | Type | Argumenten | Wat het doet |
|---|---|---|---|
stwlite_wishlist_button_shop_placement | Filter | $placement | Plaatsing op winkel- en archiefpagina's. |
stwlite_wishlist_button_product_placement | Filter | $placement | Plaatsing op individuele productpagina's. |
stwlite_wishlist_button_shop_style, stwlite_wishlist_button_product_style, stwlite_wishlist_button_cart_style | Filter | $style | Knopstijl voor elk paginatype. |
stwlite_wishlist_button_shop_label, stwlite_wishlist_button_selected_shop_label, stwlite_wishlist_button_cart_label | Filter | $label | Knoptekst voor de niet-opgeslagen status, de opgeslagen status en de winkelwagenknop. |
stwlite_wishlist_button_shop_color_options, stwlite_wishlist_button_product_color_options, stwlite_wishlist_button_cart_color_options | Filter | $color_options | De kleurinstellingen array voor elk paginatype. |
Winkelplaatsingen zijn top_right, top_left, above_title, below_title, above_button, below_button en disable. Productpagina-plaatsingen zijn top_image_right, top_image_left, top_cart, bottom_cart, inline_cart, top_title, bottom_title en disable. De plugin leest de plaatsing één keer, wanneer deze opstart op de setup_theme hook met prioriteit 100. Een plaatsingsfilter moet daarom vóór dat punt worden toegevoegd, dus registreer het in een pluginbestand en niet in een thema functions.php bestand. De stijl-, label- en kleurensfilters worden elke keer uitgevoerd wanneer een knop wordt weergegeven, dus ze werken vanuit elke code.
add_filter( 'stwlite_wishlist_button_product_placement', function ( $placement ) {
return 'bottom_cart';
} );
Zie voor het bijbehorende instellingenscherm Hoe de plaatsing en stijlen van de verlanglijstknop aan te passen in WooCommerce.
Verlanglijstgegevens
Deze filters wijzigen de gegevens van de verlanglijst zoals de plugin deze leest. Ze worden uitgevoerd bij veel verzoeken, inclusief de controles op eigendom en machtigingen, dus houd uw callbacks snel. Wijzig de waarden id, user_id, status of is_public niet, omdat de plugin deze leest om te bepalen wie een verlanglijst kan zien.
| Hook | Type | Argumenten | Wat het doet |
|---|---|---|---|
stwlite_collection_data | Filter | $collection | Filtert de ruwe database-rij telkens wanneer één verlanglijst wordt geladen op ID, URL-code of naam. |
stwlite_collections_data | Filter | $data | Filtert de array van verlanglijstobjecten die worden geretourneerd voor een lijst met verlanglijsten. |
stwlite_single_collection_data | Filter | $data | Filtert een enkel verlanglijstobject na een opslag, en in de admin verlanglijstroute. |
stwlite_collection_items_data | Filter | $data | Filtert de array van itemobjecten voor een verlanglijst. |
stwlite_all_wishlists | Filter | $collections, $params | Filtert het lijstresultaat (data, total, currentPage) voordat de frontend het retourneert. |
stwlite_collection_data_to_update | Filter | $data, $params | Filtert de kolomwaarden vlak voordat de plugin een verlanglijst naar de database schrijft. |
stwlite_options | Filter | $options | Filtert de opties-array die de plugin doorgeeft aan het frontend-script van de verlanglijst. |
Dit voorbeeld verwijdert de beschrijving uit verlanglijstobjecten in lijstreacties:
add_filter( 'stwlite_collections_data', function ( $collections ) {
foreach ( $collections as $collection ) {
$collection->description = '';
}
return $collections;
} );
Toegang tot gebruikersverlanglijst
Deze filters bepalen wie een verlanglijst kan lezen of bezitten. Voor een leesverzoek staat de plugin eerst beheerders met de manage_options-mogelijkheid toe, dan de eigenaar van de verlanglijst, dan openbare gepubliceerde verlanglijsten, dan zijn eigen deelregels. Pas nadat die controles zijn uitgevoerd, wordt stwlite_user_wishlist_access aangeroepen.
| Hook | Type | Argumenten | Wat het doet |
|---|---|---|---|
stwlite_user_wishlist_access | Filter | $granted (standaard null), $data, $user_id, $request | Retourneer true om lees toegang toe te staan, false om deze te weigeren, of null om de plugin te laten beslissen. $data is het verlanglijstobject, $user_id is 0 voor een gast, en $request is het REST-verzoek wanneer er een is. |
stwlite_user_owns_wishlist | Filter | $owns, $collection_id, $user_id, $collection | Of de huidige gebruiker de verlanglijst bezit. Het wordt alleen uitgevoerd voor een bestaande verlanglijst. |
stwlite_show_all_wishlists_for_admin | Filter | $show (standaard false) | Retourneer true om beheerders elke klantenverlanglijst te laten zien op de verlanglijst-route van de frontend. |
Dit voorbeeld laat winkelmanagers elke verlanglijst lezen:
add_filter( 'stwlite_user_wishlist_access', function ( $granted, $wishlist, $user_id, $request ) {
if ( $user_id && user_can( $user_id, 'manage_woocommerce' ) ) {
return true;
}
return $granted;
}, 10, 4 );
Verlanglijstacties
Gebruik deze acties om te reageren wanneer iets verandert, bijvoorbeeld om gegevens te synchroniseren met een CRM of een logboekvermelding te schrijven.
| Hook | Type | Argumenten | Wanneer het wordt geactiveerd |
|---|---|---|---|
stwlite_before_product_added_to_wishlist | Actie | $product_id, $quantity, $collection_id, $user_id | Voordat een product aan een verlanglijst wordt toegevoegd via de knop of de AI-mogelijkheden van de plugin. |
stwlite_after_product_added_to_wishlist | Actie | $product_id, $quantity, $collection_id, $user_id, $added | Nadat die opslag is voltooid. $added is false wanneer er niets is opgeslagen. $collection_id is de ruwe waarde van de aanvraag en is vaak 0, wat de standaardverlanglijst betekent. |
stwlite_before_product_removed_from_wishlist | Actie | $product_id, $collection_id, $variation_ids | Voordat een product uit een verlanglijst wordt verwijderd met de knop. |
stwlite_after_product_removed_from_wishlist | Actie | $product_id, $collection_id, $variation_ids | Nadat een product uit een verlanglijst is verwijderd, via de knop, de REST API of de AI-mogelijkheden. |
stwlite_before_product_added_to_cart, stwlite_after_product_added_to_cart | Actie | $collection_id, $product_id, $quantity, $variation_id | Voor en nadat een item op de verlanglijst naar de winkelwagen wordt verplaatst. |
stwlite_before_save_collection | Actie | $data | Voordat een verlanglijst wordt opgeslagen. $data is de array met kolomwaarden. |
stwlite_after_save_collection | Actie | $data, $params | Nadat een verlanglijst is opgeslagen. $data is het opgeslagen verlanglijstobject. |
stwlite_after_insert_collection_item, stwlite_after_update_collection_item | Actie | $data | Nadat een itemrij is ingevoegd of bijgewerkt. |
stwlite_before_delete_collections | Actie | $ids | Voordat verlanglijsten worden verwijderd. |
stwlite_after_delete_collections | Actie | $ids, $deleted | Nadat verlanglijsten zijn verwijderd. $deleted is het aantal verwijderde verlanglijsten. |
Dit voorbeeld slaat het laatste product op dat een klant heeft opgeslagen in hun gebruikersmeta:
add_action( 'stwlite_after_product_added_to_wishlist', function ( $product_id, $quantity, $collection_id, $user_id, $added ) {
if ( ! $added || ! $user_id ) {
return;
}
update_user_meta( $user_id, 'my_last_wishlisted_product', (int) $product_id );
}, 10, 5 );
Admin instellingstabbladen en -bedieningselementen
Het instellingenscherm bouwt zijn tabbladen en velden op uit arrays. Gebruik deze filters om uw eigen tabblad, sectie of veld toe te voegen, of om een bestaand exemplaar te wijzigen.
| Hook | Type | Argumenten | Wat het doet |
|---|---|---|---|
stwlite_admin_setting_tabs | Filter | $tabs | Laatste filter voor de volledige tabs array. |
stwlite_admin_setting_controls | Filter | $controls | Laatste filter voor de volledige controls array. |
stwlite_admin_data_tables | Filter | $data_tables (standaard lege array) | Registreert datatabellen voor de instellingentoepassing. |
stwlite_admin_setting_default_tabs, stwlite_admin_setting_default_parent_tabs, stwlite_admin_setting_default_child_tabs | Filter | $tabs | Eerdere filters voor de tabs array, het bovenliggende tabblad en de kindtabbladen. |
stwlite_admin_setting_default_general_tab, stwlite_admin_setting_default_wishlist_page_tab, stwlite_admin_setting_default_wishlist_guest_tab, stwlite_admin_setting_default_wishlist_button_tab, stwlite_admin_setting_default_importer_tab | Filter | $tab | Filtert een kindtabblad. De _sections varianten van deze namen filteren de secties van dat tabblad. |
stwlite_admin_setting_default_controls | Filter | $controls | Eerdere filter voor de controls array. |
stwlite_admin_setting_default_general_tab_controls, stwlite_admin_setting_default_wishlist_page_tab_controls, stwlite_admin_setting_default_wishlist_guest_tab_controls, stwlite_admin_setting_default_wishlist_button_tab_controls | Filter | $controls | Filtert de controls van een tabblad. |
Tabbladen bevinden zich onder de saveto_wishlist parent key. De kindtabblad keys zijn general, wishlist_page, wishlist_guest, wishlist_button en importer. Elk kindtabblad bevat sort, key, label, icon en een sections array. De controls array is keyed als $controls[ 'saveto_wishlist' ][ $tab_key ][ $section_key ], en elke sectie bevat een lijst van control arrays. Een control heeft een type (bijvoorbeeld switch of select), een label, een id dat de optienaam is, een description en een default. Controls van het type switch gebruiken de waarden yes en no.
Dit voorbeeld voegt een schakelaar toe aan het tabblad Algemeen. Het gaat uit van de sectiekey save_to_wishlist_settings, wat de eerste sectie van dat tabblad is.
add_filter( 'stwlite_admin_setting_default_general_tab_controls', function ( $controls ) {
$controls['save_to_wishlist_settings'][] = array(
'type' => 'switch',
'label' => __( 'Log wishlist adds', 'my-plugin' ),
'id' => 'my_plugin_log_wishlist_adds',
'description' => __( 'If Yes, write an entry to the debug log when a customer saves a product.', 'my-plugin' ),
'options' => array(
'yes' => __( 'Yes', 'my-plugin' ),
'no' => __( 'No', 'my-plugin' ),
),
'default' => get_option( 'my_plugin_log_wishlist_adds', 'no' ),
);
return $controls;
} );
Het instellingenscherm slaat elke controlwaarde op via de admin instellingenroute die later in dit artikel wordt beschreven. Twee dynamische filters laten u zelf een opslag of een knop afhandelen:
stwlite_group_settings_{action}is een filter die de opgeslagen waarden ontvangt als$optionswanneer de instellingen-payload een sleutel met de naamactionbevat. Het retourneert de response array metstatusenmessage.stwlite_trigger_{action}is een filter die de request parameters ontvangt als$paramswanneer de actie-route wordt aangeroepen. Het retourneert een array metstatusenmessage, en een optioneleredirectURL.
Frontend vertalingen
| Hook | Type | Argumenten | Wat het doet |
|---|---|---|---|
stwlite_frontend_translations | Filter | $i18n | Filtert de map van vertaalsleutels naar vertaalde strings die de plugin doorgeeft aan de wishlist-app. Retourneer de array. Een niet-array retourwaarde wordt genegeerd. |
De wishlist-pagina laadt deze strings twee keer per request, dus je callback moet samenvoegen in een map en zwaar werk vermijden. Dit voorbeeld verandert één string. Gebruik een sleutel die al bestaat in de array.
add_filter( 'stwlite_frontend_translations', function ( $i18n ) {
$i18n['just_now'] = __( 'a moment ago', 'my-plugin' );
return $i18n;
} );
Gebruiksgegevens
Wanneer een winkel gebruiksregistratie heeft toegestaan, stuurt de plugin periodiek een check-in. Deze filters laten een bijbehorende plugin gegevens toevoegen. Waarden moeten scalairen zijn en mogen geen referenties of persoonlijke gegevens bevatten.
| Hook | Type | Argumenten | Wat het doet |
|---|---|---|---|
stwlite_usage_checkin_data | Filter | $data | Filtert de gehele check-in payload. |
stwlite_usage_settings | Filter | $settings | Filtert de instellingen naam- en waardeparen in de payload. |
stwlite_usage_effectiveness | Filter | $data, $start, $end | Filtert de wekelijkse effectiviteitsstatistieken. $start en $end zijn UTC-datums in Y-m-d H:i:s-formaat. |
De instelling “Gebruiksregistratie” op het tabblad Algemeen regelt toestemming. Als een winkel deze op Nee zet, rapporteert de plugin niet, wat je filters ook retourneren.
REST API
Alle routes gebruiken de namespace saveto-wishlist/v1, dus het volledige pad is https://your-site.com/wp-json/saveto-wishlist/v1/ gevolgd door het pad in de tabellen. Ze volgen de normale WordPress REST-authenticatie. Browsercode stuurt de X-WP-Nonce-header voor een ingelogde gebruiker, en andere clients kunnen een applicatie wachtwoord gebruiken met HTTP Basic authenticatie. Een geweigerd verzoek retourneert de rest_forbidden_context-fout met status 401 voor een uitgelogde beller of 403 voor een ingelogde.
Klantroutes
Deze routes drijven de wishlist-knop en de wishlist-pagina aan.
| Methode en pad | Wie kan het aanroepen | Wat het doet |
|---|---|---|
POST /frontend/endpoints | Ingelogde gebruikers. Gasten worden geweigerd, tenzij een permissiefilter hen toestaat. | Voert één wishlist-actie uit die is gekozen door de parameter action. Zie de actietabel hieronder. |
GET /frontend/endpoints/wishlists | Hetzelfde als hierboven. | Retourneert data, total en currentPage voor wishlists. Klanten zien hun eigen wishlists. Het doorgeven van is_public=true lijst de publieke wishlists van andere klanten op. |
GET /frontend/endpoints/wishlist-items | Ingelogde gebruikers. Een gast kan alleen een openbare verlanglijst lezen die is benoemd met collection_id. | Retourneert de items van de verlanglijst in de vereiste collection_id parameter. De aanroeper moet ook gemachtigd zijn om die verlanglijst te bekijken, anders retourneert de route een 401 of 403 fout. |
POST /frontend/endpoints/guest-wishlist-products | Alleen voor gasten. Een ingelogde gebruiker krijgt een foutmelding. | Neemt een products array van objecten met productId, quantity, priority en addedAt. Retourneert de bijbehorende productgegevens voor een verlanglijst die in de browser is opgeslagen. |
De route POST /frontend/endpoints antwoordt altijd met HTTP 200 met een status veld, dus controleer status in de body. Een aanroeper die de verlanglijst niet bezit, krijgt status ingesteld op error. Alleen gebruikers met de manage_options capability kunnen schrijven naar de verlanglijst van een andere gebruiker.
action waarde | Parameters die het leest | Hook die het eerst vuurt |
|---|---|---|
add_wishlist | name, description, status, is_default, is_public, url_code, emails, user_ids, allowed_roles, allowed_edit_emails | stwlite_before_api_save_collection_add_wishlist met $data |
update_wishlist | id plus elk veld van add_wishlist. Alleen velden die je verzendt worden bijgewerkt. | stwlite_before_api_save_collection_update_wishlist met $data |
remove_wishlist | ids | Geen |
add_wishlist_item | collection_id, product_id, variation_id, quantity, priority, notes | stwlite_before_api_save_collection_item_add_wishlist_item met $data |
update_wishlist_item | id plus de velden van add_wishlist_item | stwlite_before_api_save_collection_item_update_wishlist_item met $data |
move_wishlist_item | id, collection_id | stwlite_before_api_save_collection_item_move_wishlist_item met $data |
remove_wishlist_item | collection_id, product_id, variation_id | stwlite_after_product_removed_from_wishlist vuurt na de verwijdering met $product_id, $collection_id, $variation_ids |
update_wishlist_item_position | lijsten | Geen |
Dit verzoek toont de verlanglijsten van het account dat de app-wachtwoord bezit:
curl -u "username:application-password" \
"https://your-site.com/wp-json/saveto-wishlist/v1/frontend/endpoints/wishlists"
Deze filters bepalen wie de klantroutecontroles doorstaat en wat de gastroute retourneert:
| Hook | Type | Argumenten | Wat het doet |
|---|---|---|---|
stwlite_api_user_permissions_check | Filter | $response, $request | Eindresultaat voor POST /frontend/endpoints en GET /frontend/endpoints/wishlists. Retourneert true of een WP_Error. |
stwlite_api_user_force_access | Filter | $force (standaard false), $request | Retourneert true om een niet-ingelogde beller door die twee routes te laten gaan. |
stwlite_check_any_user_has_permission | Filter | $response, $request | Eindresultaat voor de wishlist-items route. |
stwlite_check_any_user_has_permission_validation | Filter | $valid (standaard false), $data, $request | Retourneert true om een niet-ingelogde beller een verlanglijst te laten lezen die niet openbaar is. |
stwlite_check_guest_permission | Filter | $response, $request | Eindresultaat voor de guest-wishlist-products route. |
stwlite_guest_wishlist_products_data | Filter | $products, $product_data | Filtert de productlijst die de gastroute retourneert. |
Admin routes
De onderstaande routes bedienen de eigen admin-schermen van de plugin en kunnen tussen releases veranderen. Geef de voorkeur aan de bovenstaande hooks voor integraties. Elke admin-route vereist de manage_options-capability. Gebruik de stwlite_api_admin_permissions_check-filter ($response, $request) om dat te wijzigen, en wees voorzichtig bij het verbreden van de toegang, omdat deze routes site-opties kunnen schrijven en verlanglijsten kunnen verwijderen.
| Methode en pad | Wat het doet |
|---|---|
POST /admin/wishlists | Maakt of werkt een verlanglijst bij vanuit de request body. Retourneert een 422-fout als je items toevoegt die nog niet zijn opgeslagen aan een verlanglijst met de status draft. |
DELETE /admin/wishlists | Verwijdert de verlanglijsten in de ids-parameter. De response toont count en skipped. Een verlanglijst wordt overgeslagen wanneer het de laatste verlanglijst van de eigenaar is. |
GET /admin/wishlists/collections | Retourneert een pagina met verlanglijsten met data, total en currentPage. |
GET /admin/wishlists/collection/{id} | Retourneert één verlanglijst op numerieke ID. |
GET /admin/wishlists/items | Placeholder route die een lege data lijst retourneert. |
POST /admin/settings/save | Slaat instellingen op. De body is een lijst van objecten met key en value. Een waarde van true of false wordt opgeslagen als yes of no. |
POST /admin/settings/action | Voert het stwlite_trigger_{action} filter uit voor de action parameter. |
GET /admin/importer/sources | Lijst de wishlist plugins op die de importeur op de site heeft gedetecteerd. |
GET /admin/importer/preview/{source} | Retourneert het aantal items en een voorbeeld voor één bron. |
POST /admin/importer/import | Start een import. Het neemt source en een optioneel options object (merge_existing, preserve_default, preserve_privacy, batch_number, job_id). Een gebruiker kan één import starten per 300 seconden. |
GET /admin/importer/import/{job_id} | Retourneert de voortgang van een importtaak. |
DELETE /admin/importer/import/{job_id} | Annuleert een importtaak. |
De ingebouwde importbronnen zijn yith, ti, moreconvert en wpc. Gebruik het stwlite_available_importers filter, dat een array ontvangt en retourneert die een bron slug koppelt aan een importer class naam, om een andere te registreren.
Veelgestelde vragen
Waarom doet mijn plaatsingsfilter niets?
De plugin leest de plaatsing wanneer deze opstart op de setup_theme hook met prioriteit 100. Voeg het filter toe vanuit een pluginbestand. Een thema functions.php bestand wordt na dat punt geladen.
Waarom verliest mijn knop markup een tag of attribuut?
De plugin voert de knop markup uit via wp_kses(). Voeg de tag of het attribuut toe aan de toegestane lijst met het stwlite_allowed_button_html filter.
Waarom retourneert de save route HTTP 200 voor een geweigerd verzoek?
POST /frontend/endpoints antwoordt altijd met HTTP 200 en plaatst het resultaat in het status veld van de body. Lees status en message in plaats van de HTTP-code.
Wat nu?
- Hoe breid je SaveTo Wishlist Pro uit met hooks en de REST API
- Hoe breid je SaveTo Wishlist Registry uit met hooks en de REST API
- Hoe AI-mogelijkheden te gebruiken in SaveTo Wishlist
Hulp nodig?
Als u een vraag heeft of tegen problemen aanloopt, staan we klaar om u te helpen.
- Premium gebruikers: Open een supportticket
- Gratis gebruikers: Bezoek ons communityforum
