Ga naar inhoud

Artikel-single (met paywall)

Doel & URL('s)

De artikelpagina is het belangrijkste scherm van de WV-subsite: hier wordt de journalistieke inhoud van De Waarheidsvriend gelezen én werkt het paywall-/leadgeneratiemechanisme.

  • URL: /de-waarheidsvriend/artikelen/{slug}/
  • Doelgroep: iedereen; volledige tekst voor abonnees en (per artikel) nieuwsbriefinschrijvers.
  • Testvoorbeelden (productiedata): de-man-achter-de-jarige-bijbelvertaling en de-biddende-gemeente (met paywall-marker), zie-ik-kom (meditatie, zonder marker, volledig vrij).
  • 403 van de 8.728 gepubliceerde artikelen bevatten een paywall-marker (telling augustus 2026); artikelen zonder marker zijn integraal openbaar.
  • Layout: content 8 kolommen + sidebar 4 kolommen (sidebar rechts), binnen de site-brede schil (zie overzicht).

Opbouw

Van boven naar beneden:

  1. Kopafbeelding met overlay — alleen wanneer article_image gevuld is én article_type ≠ "in memoriam". Overlay bevat (van boven naar beneden): typelabel (alleen bij type ≠ standaard), chapeau (article_subtitle), <h1> met de titel. Bij article_image_as_cover wordt de afbeelding als "boekcover" getoond tegen een vaste achtergrondafbeelding.
  2. Zonder kopafbeelding (geen beeld óf in memoriam): typelabel, chapeau en <h1> staan bovenaan de contentkolom.
  3. Auteursregel (klein) — auteursfoto als thumbnail (generieke silhouet-fallback bij auteur zonder foto), "Door: {naam}", categorienamen, publicatiedatum (NL-formaat, bijv. "6 maart 2026").
  4. Leadarticle_intro als <p class="lead">.
  5. Componenten — de artikeltekst als ACF flexible content (components), gerenderd in redactionele volgorde. Layout-typen: tekst, tekst+beeld, beeld+tekst, beeld, kader (frame), citaat (quote), galerij, call-to-action, donatie, video, downloads, tabel, en de positiemarker paywall (geen data, alleen positie). Hier grijpt de paywall in — zie hieronder.
  6. Artikelfooter
    • Auteursblok (groot) — alleen als een auteur gekoppeld is: foto, naam, biografie (HTML uit het auteursprofiel).
    • Share-links — "Deel dit artikel: " met Facebook-sharer, Twitter/X-share en LinkedIn-share, elk met de ge-encodeerde artikel-URL.
  7. Sidebar (elk blok alleen indien gevuld)
    • Downloads — kop "Downloads"; per item titel, bestandstype en bestandsgrootte; opent in nieuw tabblad.
    • "Lid worden"-banner — subsite-brede call-to-action (optie WV_sidebar_banner).
    • Artikel-advertentie — afbeelding + link uit article_call_to_action_banner (alleen als afbeelding gezet is).
    • Agenda-blok — de 2 eerstvolgende agenda-items + link naar het agenda-archief.
  8. Gerelateerde artikelen — sectie onder de contentcontainer, alleen als article_related_items gevuld is: kop "Gerelateerde artikelen" met per kaart beeld + categorie-overlay, titel, intro (max. 130 tekens + "..."), datum en "Lees door"-link.

SEO

  • og:description = article_intro (zonder HTML).
  • og:image = article_image op 1200×630 (fallback: origineel formaat, anders Yoast-default).

Databronnen

ACF-groep "Artikelen" op wv-article (gedeeld met tr-/cgc-artikelen):

Veld Type Betekenis
article_type select default ("standaard"), column, blog, memoriam ("in memoriam")
article_category taxonomy categorieën (wv_article_category, meervoudig)
article_image image kopafbeelding
article_image_as_cover true/false afbeelding als boekcover tonen
article_subtitle text chapeau
article_intro textarea lead
article_components flexible content (clone "Componenten") de artikeltekst, incl. paywall-marker
article_author relationship → CPT author auteur(s); de site toont alleen de eerste
article_related_items relationship gerelateerde artikelen (handmatig)
article_issue post object → CPT issue koppeling aan uitgave (alleen gebruikt in REST/app, niet op de site)
article_downloads repeater (titel + bestand) sidebar-downloads
article_call_to_action_banner clone (afbeelding + link) sidebar-advertentie

CPT author (auteurskaart): name (tekst), image (foto), description (biografie, wysiwyg). NB: auteur-detailpagina's (/predikanten/{slug}/) bestaan niet (404) — auteurs worden alleen inline getoond.

Paywall-opties (ACF "Thema instellingen", per subsite, WV_-prefix):

Optie Waarde in data
paywall_title "Dit artikel gratis verder lezen?"
paywall_text "Schrijf u in voor onze nieuwsbrief en lees de volledige tekst van dit artikel."
paywall_form_id 29 ("Nieuwsbrief (paywall)")
paywall_title_subscriber "Verder lezen? Word abonnee!"
paywall_text_subscriber wervingstekst met link naar /de-waarheidsvriend/aanbieding/ ("vier maanden voor € 10,-")

Het paywall-mechanisme

Principe

De paywall is een redactioneel geplaatste positiemarker in de componenten. Alles vóór de marker is de gratis teaser; alles erná is afgeschermd. De afkapping is server-side: componenten ná de marker komen bij een afgeschermde weergave niet in de HTML-bron voor (dus ook niet verborgen via CSS).

Volledige weergave krijgt wie aan één van twee voorwaarden voldoet:

  1. ingelogd mét rol wv-subscriber, of
  2. een geldige artikel-cookie: cookie subscribed-to-newsletter bestaat én bevat (base64-gecodeerd) het post-ID van dit artikel.

Matrix "wie ziet wat" (artikel mét paywall-marker)

Bezoeker Artikeltekst Paywall-box Inhoud box
Anoniem, geen cookie t/m marker ja titel "Dit artikel gratis verder lezen?", instellingentekst, formulier 29 (1 verplicht e-mailveld, knop "Versturen")
Anoniem, cookie voor dít artikel volledig nee
Anoniem, cookie voor een ánder artikel t/m marker ja titel "Verder lezen? Word abonnee!", wervingstekst met link naar /de-waarheidsvriend/aanbieding/, géén formulier
Ingelogd zonder rol wv-subscriber (ook pastor, ook admins) t/m marker ja variant afhankelijk van cookie, zoals hierboven
Ingelogd mét rol wv-subscriber volledig nee

De variantkeuze (inschrijf- vs. abonnee-wervingsbox) hangt uitsluitend af van het bestaan van de cookie, niet van de geldigheid ervan voor het huidige artikel.

Inschrijf-flow (Gravity Form 29 "Nieuwsbrief (paywall)")

  1. Bezoeker vult in de paywall-box het e-mailadres in en verstuurt (non-AJAX-submit naar dezelfde artikel-URL).
  2. Server-side hook (op formuliertitel "Nieuwsbrief (paywall)"):
    • zet cookie subscribed-to-newsletter = base64(post-ID van het artikel), looptijd 10 jaar, pad /;
    • redirect terug naar de artikel-permalink → de pagina herlaadt en toont de volledige tekst.
  3. Het e-mailadres wordt via de Mailchimp-feed van formulier 29 aangemeld op Mailchimp-lijst 06ec423fd4 (double opt-in uit). De GF-bevestigingstekst ("Bedankt voor uw inschrijving! Houd uw mailbox in de gaten, …") wordt door de redirect in de praktijk niet getoond.
  4. De cookie geeft slechts dit ene artikel vrij. Elk volgend paywall-artikel toont de abonnee-wervingsvariant zónder formulier: gratis doorlezen via een tweede inschrijving is bewust niet mogelijk.

Nieuwsbriefbestemming (vastgesteld 2026-08-06)

Formulier 29 gaat alleen naar Mailchimp. De Listmonk-koppeling geldt uitsluitend voor formulier 22 en dan alleen bij inzending vanuit GB-context (de optie listmonk_newsletter_form_ids bestaat alleen met GB_-prefix). Een eerdere inventarisatie-claim dat paywall-inschrijvers naar Listmonk gaan, klopt niet.

Randgevallen

  • De teaserlengte is per artikel redactioneel bepaald (positie van de marker); er is geen automatische afkapping.
  • De cookiewaarde is triviaal manipuleerbaar (base64 van het post-ID): de afscherming is "soft", per artikel.
  • Intro's (lead, kaarten, gerelateerd) zijn nooit afgeschermd.
  • Artikelen zonder marker renderen de volledige componentenlijst voor iedereen; de paywall-box verschijnt daar nooit.
  • Headless/REST-pariteit: in de REST-response (/wp/v2/wv-articles, alleen geauthenticeerd) krijgt een niet-abonnee gb_locked: true, lege content.rendered en géén components; chapeau/titel/lead/auteur/beeld blijven beschikbaar.

Gedrag & rollen

Zie de matrix hierboven. Aanvullend:

  • Share-links openen de externe deelvensters met de artikel-URL; er is geen deel-API of copy-knop.
  • Downloads openen in een nieuw tabblad; de bestanden zelf zijn niet afgeschermd.
  • Cross-site: hetzelfde artikel kan vanaf GB-overzichten bereikt worden met ?t=GB (GB-huisstijl + noindex); het paywall-gedrag is identiek (de GB-paywall-opties hebben dezelfde waarden).

Acceptatiecriteria

Weergave:

  • Als anonieme bezoeker op /de-waarheidsvriend/artikelen/{slug}/ van een gepubliceerd artikel dan HTTP 200 met chapeau, <h1>-titel, auteursregel "Door: {naam}" + categorieën + datum, en de lead (article_intro).
  • Als anonieme bezoeker op een artikel mét kopafbeelding en type ≠ in memoriam, dan staan typelabel/chapeau/titel als overlay op het beeld; zonder beeld of bij in memoriam staan ze boven de tekst en is er geen kopafbeelding.
  • Als anonieme bezoeker op een artikel met article_type = column/blog/in memoriam dan wordt het typelabel getoond; bij type "standaard" niet.
  • Als anonieme bezoeker op een artikel met gekoppelde auteur dan staat onder het artikel het auteursblok met foto, naam en biografie; zonder auteur ontbreekt het blok.
  • Als anonieme bezoeker op een artikel dan staan onder het artikel share-links naar Facebook, Twitter/X en LinkedIn met de ge-encodeerde artikel-URL.
  • Als anonieme bezoeker op een artikel met gevulde article_related_items dan staat onderaan de sectie "Gerelateerde artikelen" met per kaart titel, intro (max. 130 tekens + "..."), datum en "Lees door"-link; zonder gevuld veld ontbreekt de sectie.
  • Als anonieme bezoeker op een artikel met downloads dan toont de sidebar het blok "Downloads" met per item titel, bestandstype en bestandsgrootte, en opent de link in een nieuw tabblad.
  • Als anonieme bezoeker op een artikel dan toont de sidebar de "Lid worden"-banner en het agenda-blok met de 2 eerstvolgende agenda-items; de artikel-advertentie alleen als die op het artikel is ingesteld.
  • Als crawler op een artikel dan is og:description gelijk aan de intro en verwijst og:image naar de artikelafbeelding op 1200×630.

Paywall:

  • Als anonieme bezoeker zonder cookie op een artikel mét paywall-marker dan zijn uitsluitend de componenten vóór de marker aanwezig in de HTML-bron, gevolgd door precies één paywall-box met titel "Dit artikel gratis verder lezen?", de instellingentekst en een formulier met één verplicht e-mailveld; de tekst ná de marker komt nergens in de bron voor.
  • Als anonieme bezoeker het paywall-formulier met een geldig e-mailadres verstuurt, dan wordt hij teruggeleid naar hetzelfde artikel en is de volledige tekst zichtbaar, zonder paywall-box; er is een cookie subscribed-to-newsletter gezet met een looptijd van ~10 jaar en pad /.
  • Als anonieme bezoeker mét die cookie een ander artikel met paywall-marker opent, dan toont de paywall-box "Verder lezen? Word abonnee!" met een link naar /de-waarheidsvriend/aanbieding/ en zónder formulier; de tekst blijft afgekapt.
  • Als anonieme bezoeker het paywall-formulier zonder (of met ongeldig) e-mailadres verstuurt, dan blijft het artikel afgekapt en toont het formulier een validatiefout; er wordt geen cookie gezet.
  • Als ingelogde wv-subscriber op een artikel mét paywall-marker dan is de volledige tekst zichtbaar zonder paywall-box (ongeacht cookies).
  • Als ingelogde gebruiker zónder rol wv-subscriber (bijv. alleen pastor) op een paywall-artikel dan is het gedrag identiek aan anoniem (afgekapt + boxvariant op basis van cookie).
  • Als willekeurige bezoeker op een artikel zónder paywall-marker dan is de volledige tekst zichtbaar en komt er geen paywall-box voor.
  • Als bezoeker na inschrijving via het paywall-formulier, dan is het opgegeven e-mailadres aangemeld op de nieuwsbrieflijst (huidig: Mailchimp-lijst 06ec423fd4, zonder double opt-in; rebuild: de dan gekozen nieuwsbriefvoorziening).

Bekende afwijkingen (NIET nabouwen; wel vermelden in het testrapport)

  • De keuze tussen de twee paywall-boxvarianten kijkt alleen naar het bestaan van de cookie, niet naar de inhoud; een corrupte/vreemde cookiewaarde levert dus de abonnee-variant zonder formulier op.
  • In-memoriam-artikelen tonen nooit de kopafbeelding-header, ook als er wél een afbeelding is ingesteld.
  • Het veld article_advertising wordt door de code uitgelezen maar bestaat niet in de ACF-definitie (altijd leeg) — niet overnemen.
  • De GF-bevestigingstekst van formulier 29 is geconfigureerd maar wordt door de cookie-redirect nooit getoond.
  • Alleen de eerste gekoppelde auteur wordt getoond, ook als er meerdere zijn gekoppeld; voor de rebuild bevestigen of dit gewenst is.
  • Auteursnamen in de auteursregel linken nergens heen (auteur-detailpagina's geven 404 en zijn bewust niet nagebouwd).