← Blog

WordPress

WordPress AI-integraties: vijf patronen op klantimpact

Een WooCommerce-shop, 12.000 SKU's, native search geeft niets bij 'mens running shoe size 11'. We hebben dit probleem veertien keer gebouwd. Dit zijn de vijf AI-patronen die echt opleverden.

Jacob Molkenboer· Oprichter · A Brand New Company· 13 feb 2024· 7 min
Open messing kaartenbaklade met indexkaarten, één limoengroen tabblad omhoog, lakzegel op gevouwen briefje, ivoren papier.

Een WooCommerce-shop, 12.000 SKU's, een tweekoppig team in Eindhoven. De native search geeft 'geen resultaten' voor mens running shoe size 11, omdat elk product getagd staat als size 44 EU. De eigenaar mailt op een dinsdag of we het kunnen fixen voor piekseizoen. Dit is het WordPress-werk in 2026: geen nieuwe plugins, geen theme-refreshes, maar AI rustig inbouwen in de delen van de site die er al staan.

We hebben er het afgelopen jaar veertien gebouwd of herbouwd voor klanten. Steeds dezelfde vijf patronen. Hier zijn ze, gerangschikt naar hoeveel geld of hoeveel uren ze de business echt opleverden.

1. Vector search in WooCommerce

De grootste omzethendel. De native WordPress-search is een LIKE %query% op wp_posts.post_title en post_content. Synoniemen, meervoudsvormen, maten, andere talen en alles wat in productattributen leeft: weg, tenzij iemand vijf jaar geleden een SearchWP-installatie heeft mishandeld.

Het patroon dat werkt op elke shop die we hebben aangepakt:

  • Index elk product in een vector store (Pinecone, Weaviate, of pgvector als je naast MySQL al Postgres draait).
  • Embed producttitel, korte omschrijving, categorie en de eerste paar attribuutwaardes als één chunk.
  • Registreer een REST-route die de query van de gebruiker embed, de top 24 IDs ophaalt en die door wc_get_products() haalt zodat prijs, voorraad en zichtbaarheidsregels blijven gelden.
  • Cache populaire queries in Redis of een transient van 10 minuten.

De plumbing is korter dan mensen denken:

add_action('rest_api_init', function () {
    register_rest_route('abn/v1', '/search', [
        'methods'             => 'GET',
        'callback'            => 'abn_vector_search',
        'permission_callback' => '__return_true',
    ]);
});

function abn_vector_search(WP_REST_Request $req) {
    $q = sanitize_text_field($req->get_param('q'));
    if (strlen($q) < 2) {
        return rest_ensure_response([]);
    }

    $key    = 'abn_vs_' . md5($q);
    $cached = get_transient($key);
    if ($cached !== false) {
        return rest_ensure_response($cached);
    }

    $embedding = abn_embed($q);                  // POST to embeddings API
    $ids       = abn_pinecone_query($embedding); // returns array of product IDs
    if (empty($ids)) {
        return rest_ensure_response([]);
    }

    $products = wc_get_products([
        'include' => $ids,
        'orderby' => 'post__in',
        'status'  => 'publish',
        'limit'   => 24,
    ]);

    $payload = array_map('abn_format_product', $products);
    set_transient($key, $payload, 10 * MINUTE_IN_SECONDS);
    return rest_ensure_response($payload);
}

Op de woonwinkel hierboven verdrievoudigde de conversie op search-driven sessies ruwweg in de acht weken na livegang. De eigenaar gaf Google Ads de schuld. De fix was een REST-route en een Node-worker van 60 regels die 's nachts opnieuw indexeerde.

2. Inbox en lead-triage

De op één na grootste impact, elke keer. De site heeft al een contactformulier. Gravity, CF7, Fluent, maakt niet uit. Er komt een submission binnen, een office manager leest hem 90 seconden, beslist of het naar sales, support, partnerships, pers of de prullenbak gaat, en tikt een reply. Vermenigvuldig met 80 submissions per dag.

Vervang de manager-als-router door een kleine worker:

  1. Hook in op gform_after_submission (of wpcf7_before_send_mail).
  2. Stuur de payload naar een LLM met een classificatie-prompt die strikt JSON teruggeeft.
  3. Schrijf de categorie terug naar een custom field. Route op basis daarvan.
  4. Voor sales en support: genereer een concept-reply en zet hem in de helpdesk als draft, niet als verzonden mail. Mensen keuren goed, mensen versturen.

De classifier kost een fractie van een cent per submission. De concept-reply kost een paar cent. De office manager krijgt een uur per dag terug. De eerste drie weken kijk je naar de misclassificaties en stel je de prompt bij. Daarna draait het gewoon.

3. Front-end chat agent

De zichtbare. Een widget in de hoek van de site die FAQ beantwoordt, demo's inplant en leads kwalificeert volgens dezelfde regels die een junior verkoper zou hanteren. Nuttig, maar staat op drie omdat het alleen iets oplevert op sites met echt verkeer. Voor de rest is het een ijdelheids-installatie.

Als je dit oplevert, dan met drie dingen vanaf dag één op orde:

  • Een WordPress REST-proxy voor het model. De API key komt nooit in de buurt van de browser.
  • Een rate limit per IP en per session. Gebruik Redis of je object cache, niet wp_options.
  • Verdediging tegen prompt injection. Filter system-prompt-achtige strings uit de user message voordat je doorstuurt, en behandel de output van elke tool call als untrusted input in de volgende beurt. De OWASP LLM Top 10 is verplichte leesvoer, niet optioneel.

Het beveiligingsplafond is dit jaar verschoven. De Morris II-paper (Cohen, Bitton, Nassi) demonstreerde een zero-click, zelfvermeerderende worm tegen GenAI-assistenten met tool-toegang, door prompts te verstoppen in content die de agent later verwerkt. Als je chat-widget bestanden kan lezen, URLs kan aanroepen of interne API's kan triggeren, ga er dan vanuit dat een aanvaller hem als jump host probeert te gebruiken. Sandbox de tool calls, log ze, en rate-limit egress op netwerkniveau, niet alleen binnen PHP.

4. Content drafting in de editor

Gutenberg kent block-uitbreidbaarheid al jaren. Bijna niemand gebruikt het voor AI-ondersteuning buiten de plug-ons-van-de-plank, die allemaal per seat rekenen en generieke teksten in je editor dumpen. Een eigen sidebar-panel is een week werk en het bureau houdt zelf de keys.

Drie dingen die hun plek in de editor verdienen:

  • Alt-tekst genereren vanuit de featured image. Lees de afbeelding, geef maximaal 120 tekens terug in de stem van de site.
  • SEO-titel en meta description uit de body van het bericht. Verankeer de toon met drie voorbeelden uit bestaande top-rankende posts van de klant.
  • Suggesties voor interne links. Embed elke gepubliceerde post één keer, en bij opslaan toon je de drie dichtstbijzijnde matches met anchor-tekst-suggesties. Het retrieval-probleem is hetzelfde dat image-RAG-papers nu een laag hoger oplossen; voor een editor is je index de eigen back catalogue van de klant.

Registreer het panel via de PluginDocumentSettingPanel-slot. Roep je eigen REST-endpoint aan. Stream de response als het model dat ondersteunt, dan ziet de schrijver de output in realtime opbouwen.

5. Toegankelijkheid automatiseren

De European Accessibility Act (Richtlijn 2019/882) is op 28 juni 2025 in werking getreden. Elke commerciële site die aan de EU verkoopt, moet sindsdien toegankelijke alternatieven bieden, en 'we kwamen er niet aan toe' is geen verweer. Lees de richtlijn voordat je weer met een klant ruzied over budget voor alt-teksten.

Drie klussen die een AI-ronde in een weekend afsluit:

  • Alt-tekst voor de wp_postmeta-rijen waar _wp_attachment_image_alt leeg is of een kopie van de bestandsnaam. Een vision-model labelt ze in batches van 50.
  • Knop- en linklabels. Vind elke <a> waarvan de zichtbare tekst 'klik hier', 'lees meer' of leeg in een wrapper is, en stel een echt label voor op basis van de <h1> van de bestemmingspagina.
  • Heading-hiërarchie. Markeer posts waar h2 op h4 volgt, of waar de pagina geen h1 heeft. Fix de slechtste 20 met de hand en zet de rest in een queue voor de redacteur.

De truc: alt-tekst niet automatisch toepassen. Stage hem. Laat de content lead in batches goedkeuren. De kosten van één foute alt-tekst op een hero-productfoto zijn hoger dan de gewonnen tijd.

De gedeelde plumbing

Alle vijf staan achter dezelfde drie stukken infrastructuur. Bouw het één keer.

Een REST-namespace (/wp-json/abn/v1/) die elke modelaanroep bezit. Keys staan in wp-config.php of, beter, in een secrets manager die het PHP-FPM-proces bij boot leest. Een Redis- of Memcached-laag voor elke dure call. Een request-log-tabel die query, model, prompt tokens, completion tokens en latency vastlegt, zodat je 'wat heeft dit afgelopen maand gekost' met één SQL-query beantwoordt.

De bureaus die dit in 2026 winnen, zijn niet de bureaus met de fancyste modellen. Het zijn de bureaus die een LLM-call behandelen als elke andere betaalde externe API: gecached, rate-limited, gelogd en omkeerbaar.

Kernpunt

De grootste WordPress-AI-winst dit jaar is geen chatbot in de hoek. Het is de kapotte default search vervangen door vector embeddings, en de office manager een inbox geven die zichzelf triëert.

Wat je deze week doet

Open WP-Admin. Ga naar WooCommerce, Rapporten, Bestellingen, Zoektermen (of query wp_options op _transient_woocommerce_reports_search_terms als het rapport leeg is). Trek de top 50 zoekopdrachten zonder resultaat uit de laatste 30 dagen. Sorteer op frequentie. Laat de lijst aan de founder zien. Dat spreadsheet is de business case voor integratie #1, en je hoeft er geen slide voor te schrijven.

Toen we de WooCommerce-search-herbouw voor de Eindhovense klant hierboven opleverden, was de pijn dat alle productattributen in geserialiseerde PHP-arrays in wp_postmeta stonden. We schreven een one-shot script om ze plat te slaan vóór het embedden, en dat is de oninteressante helft van elk AI-agents-project dat we opleveren. Het meeste werk zit in de data, niet in het model.

Kern

De grootste WordPress-AI-winst in 2026 is geen chatbot in de hoek. Het is de kapotte default search vervangen door vector embeddings.

FAQ

Moeten we WordPress verlaten om dit te kunnen doen?

Nee. Alle vijf patronen leven binnen WordPress: een REST-namespace, een kleine worker voor indexering of classificatie, en een Gutenberg sidebar-panel. Het model mag overal draaien.

Welke vector database moet een WordPress-bureau kiezen?

Draai je al Postgres, dan is pgvector het goedkoopste pad. Is je stack alleen MySQL: begin met Pinecone of het hosted plan van Weaviate. Later overstappen is één re-index, geen rebuild.

Hoe houden we de chat-widget veilig tegen prompt injection?

Proxy via WordPress, zet de API key nooit in de browser, rate-limit per IP, filter geïnjecteerde system prompts uit user input, en behandel tool output als untrusted. Lees de OWASP LLM Top 10.

Breekt iets hiervan WooCommerce Subscriptions of membership-plug-ons?

Vector search haalt resultaten door wc_get_products, dus subscription-producten en membership-zichtbaarheidsregels blijven gelden. De andere vier patronen staan volledig naast de winkelwagen.

wordpressai agentse-commerceintegrationsragaccessibility

Iets bouwen?

Start een project