Aanmeldformulieren

Integraties met andere formulierplugins

Wynko’s eigen aanmeldformulier is niet de enige manier om iemand aan te melden voor een Laposta-lijst. Wynko → Integraties toont optionele bridges waarmee een formulier uit een andere plugin via Wynko naar Laposta kan schrijven — met hergebruik van je API-sleutel, je lijst- en velddefinities en je activiteitenlog, zonder dat die andere plugin iets van Laposta hoeft te weten.

Elke integratie wordt uitgeschakeld geleverd. Een site die er geen gebruikt, betaalt er niets voor. Schakel er een in via het Integraties-scherm; een integratie kan alleen worden geactiveerd zolang de plugin waaraan hij koppelt ook actief is.

De gebundelde integraties

Er komen er twee met Wynko mee:

  • Contact Form 7 — leest een native Contact Form 7-checkboxtag, [checkbox wynko-optin-{list_id} …], die je in de eigen template van je formulier plakt. Een inzending met dat vakje aangevinkt wordt aangemeld voor de lijst die de tag noemt.
  • HTML Forms — hetzelfde idee voor de HTML Forms-plugin, die geen getypt tagsysteem heeft, dus plak je in plaats daarvan een klein blok HTML.

Voor beide worden Laposta-velden die de lijst als verplicht markeert geleverd door formuliervelden die je exact wynko-{veldnaam} noemt. Het Instellingen-scherm van elke integratie toont je de precieze tag of HTML om te plakken, per lijst, zodat je de namen niet zelf hoeft uit te zoeken.

Omdat deze bridges aanhaken op het eigen formulier van een andere plugin, lopen ze niet door Wynko’s aanmeldpijplijn — er is geen Wynko-honeypot, geen post-inzendredirect, en de rate-limit-limiet per formulier geldt niet. De limiet per bezoeker wel, geteld op het IP-adres dat die andere plugin bepaalde. Zie Instellingenoverzicht voor de rate limits.

Als de plugin waaraan hij koppelt verdwijnt

Deactiveer je Contact Form 7 (of HTML Forms) terwijl de Wynko-integratie nog aanstaat, dan merkt Wynko dat bij de volgende paginaweergave, schakelt de integratie zelf weer uit — “aan” laten zou verkeerd weergeven wat er draait — legt een fout vast in het activiteitenlog (zodat er een kritieke e-mailmelding uitgaat als je die aan hebt; een formulier kan net stil zijn geworden), en toont een eenmalige adminmelding met de naam van de integratie.

De Deactiveren-link op het Integraties-scherm waarschuwt je ook, in het bevestigingsvenster, over het concrete dat stopt met werken — voor de Contact Form 7-bridge dat een al in een formulier geplakt opt-invakje niemand meer aanmeldt.

Integraties van andere ontwikkelaars

De bridge-lijst is open: elke plugin of thema kan zijn eigen integratie registreren, en die verschijnt dan op hetzelfde scherm met eigen naam, omschrijving, versie en documentatielink. Integraties die niet door Wynko worden geleverd, worden ontwikkeld en ondersteund door hun eigen auteurs — voor een probleem ermee, neem contact op met die ontwikkelaar.

Je eigen integratie bouwen

Een integratie is een PHP-klasse die Wynko\Integrations\Integration implementeert en wordt toegevoegd aan het filter wynko_register_integrations (beschikbaar sinds Wynko 1.2). Wynko toont hem dan op Wynko → Integraties, bewaart zijn aan/uit-stand, en roept zijn boot()-methode één keer aan — alleen wanneer een beheerder hem heeft ingeschakeld én zijn is_available()-controle slaagt.

Het contract

Implementeer al deze methoden:

Methode Retourneert Waarvoor
slug() string Stabiele identifier, bijv. mijn-formulierplugin. Het is de sleutel waaronder je aan/uit-stand wordt bewaard, dus verander hem nooit tussen releases.
name() string Weergavenaam in de Integraties-lijst.
description() string Eén zin onder de naam.
author() string Je naam of pluginnaam voor de kolom “Geleverd door”. '' markeert hem als gebundeld met Wynko.
author_uri() string Waar author() naartoe linkt. '' toont het als platte tekst.
documentation_uri() string Waar “Documentatie bekijken” naartoe linkt. '' toont geen link.
version() string De versie van jouw plugin of thema — niet die van Wynko.
is_available() bool Of datgene waaraan je koppelt (meestal een andere plugin) op dit moment actief is.
boot() void Haak hier je eigen hooks aan. Wordt één keer aangeroepen, alleen wanneer ingeschakeld en beschikbaar.
render_settings() void Print je instellingenscherm, of doe niets als je er geen hebt. Alles wat je hier echo’t moet je zelf escapen, en elke actie die het indient moet je zelf beschermen met een capability-check en een nonce.
deactivation_warning() string Eén zin die noemt wat stopt met werken als een beheerder je uitschakelt. '' valt terug op een generieke waarschuwing.

name(), description(), author(), version() en deactivation_warning() worden altijd escaped weergegeven door Wynko, wat ze ook retourneren.

Registreren

Jouw plugin hangt af van Wynko, nooit andersom, dus je registratie moet niets doen — geen fatale fout — op een site waar Wynko niet actief is:

add_action( 'plugins_loaded', function () {
	if ( ! interface_exists( '\Wynko\Integrations\Integration' ) ) {
		return;
	}
	add_filter( 'wynko_register_integrations', function ( array $integrations ) {
		$integrations[] = new My_Form_Plugin_Wynko_Integration();
		return $integrations;
	} );
} );

Naar Laposta schrijven

Verstuur vanuit je boot()-hooks een abonnee met Wynko\Api\Subscribers::create( $list_id, $email, $ip, $source_url, $custom_fields, $skip_doi ) — dat hergebruikt Wynko’s API-sleutelresolutie, transport en foutafhandeling. Het filter wynko_subscriber_data (zie Hooks en filters) wordt bij elke zo’n aanroep geactiveerd als jij of anderen de payload moeten aanpassen.

Twee gedragingen om rekening mee te houden

  • Beschikbaarheid en aan/uit-stand zijn los van elkaar. Wynko roept boot() alleen aan wanneer beide ja zeggen. Verdwijnt je dependency terwijl een beheerder je aan had staan, dan zet Wynko de bewaarde instelling zelf weer uit, logt dit, en toont een eenmalige melding — zodat je nooit een “ingeschakeld maar niet beschikbaar”-toestand hoeft af te handelen.
  • Rate limiting. Een bridge-inzending valt onder de IP-limiet per bezoeker (Wynko\Throttle::allows_ip()) maar niet onder de limiet per formulier, die op Wynko’s eigen formulieren is toegespitst.

De gebundelde klassen ContactForm7Integration en HtmlFormsIntegration in de plugin-broncode zijn volledige, werkende voorbeelden.