WordPress hooks + AI: 4 slimme use-cases voor je WooCommerce-shop
Met action en filter hooks koppel je AI direct aan WooCommerce — zonder externe automatisering. Vier concrete use-cases met code-snippets.
WordPress is groot geworden door zijn hooks: add_action() en add_filter(). Voor een WooCommerce-shopeigenaar betekent dat je AI rechtstreeks in je shop kunt prikken — geen aparte automatiseringstool nodig, geen Zapier-licentie, geen wachtende n8n-instance.
Dit artikel laat vier use-cases zien waar een paar regels PHP + één AI-call al een serieus verschil maken. Snippets staan erbij; je kan ze plakken in functions.php van een child-theme of in een mu-plugin onder wp-content/mu-plugins/.
Veiligheidsnetje: test alles eerst op staging. AI-calls tijdens een hook zijn synchroon — als de AI traag is, kruipt je checkout. Voor zwaardere taken: trigger via wp-cron of off-load via Action Scheduler.
Setup: één keer een AI-helper maken
Plaats dit in een mu-plugin (wp-content/mu-plugins/aiwoo-helpers.php):
<?php
function aiwoo_call_openai( $prompt, $model = 'gpt-4o-mini' ) {
$api_key = defined( 'OPENAI_API_KEY' ) ? OPENAI_API_KEY : '';
if ( ! $api_key ) return new WP_Error( 'no_key', 'OPENAI_API_KEY mist in wp-config.php' );
$response = wp_remote_post( 'https://api.openai.com/v1/chat/completions', [
'timeout' => 20,
'headers' => [
'Authorization' => 'Bearer ' . $api_key,
'Content-Type' => 'application/json',
],
'body' => wp_json_encode( [
'model' => $model,
'messages' => [ [ 'role' => 'user', 'content' => $prompt ] ],
] ),
] );
if ( is_wp_error( $response ) ) return $response;
$body = json_decode( wp_remote_retrieve_body( $response ), true );
return $body['choices'][0]['message']['content'] ?? '';
}
Sleutel zelf in wp-config.php: define( 'OPENAI_API_KEY', 'sk-...' );. Niet in code committen.
Met deze helper zijn de use-cases een paar regels per stuk.
Use-case 1 — AI-concept-antwoord bij elke nieuwe order
Als je orders verwerkt en wilt dat klanten een persoonlijk klinkende bedankmail krijgen (bovenop de standaard WooCommerce-mail) zonder dat je ‘m zelf typt:
add_action( 'woocommerce_order_status_processing', function( $order_id ) {
$order = wc_get_order( $order_id );
$items = wp_list_pluck( $order->get_items(), 'name' );
$voornaam = $order->get_billing_first_name();
$prompt = "Schrijf een korte persoonlijke bedankmail (max 80 woorden) "
. "in het Nederlands voor {$voornaam}. Klant kocht: "
. implode( ', ', $items ) . ". Tone: warm, droog, geen uitroeptekens. "
. "Eindig met een zin over levering.";
$tekst = aiwoo_call_openai( $prompt );
if ( ! is_wp_error( $tekst ) ) {
$order->add_order_note( "AI-concept bedankmail:\n\n{$tekst}", 0, false );
}
}, 20, 1 );
In je Woo-admin verschijnt het concept als een privé-notitie bij de order. Een medewerker kopieert, past ‘m aan, mailt vanuit Outlook of een mailtool. Klanten krijgen een merkbaar persoonlijker bericht, jij behoudt controle.
Use-case 2 — AI-tag bij hoog-risico orders
Eén klacht over fraude die je toch eerder gezien had en je wéét waarom dit ertoe doet. Hook:
add_action( 'woocommerce_checkout_order_processed', function( $order_id ) {
$order = wc_get_order( $order_id );
$totaal = $order->get_total();
$eerste = $order->get_customer_id() ? false : true;
$land = $order->get_billing_country();
if ( $totaal < 200 ) return; // alleen orders > €200 laten checken
$prompt = "Order-screening (alleen risico-detectie, geen oordeel):\n"
. "Totaal: €{$totaal}\n"
. "Eerste-keer-koper: " . ( $eerste ? 'ja' : 'nee' ) . "\n"
. "Land: {$land}\n"
. "Producten: " . wp_json_encode( wp_list_pluck( $order->get_items(), 'name' ) ) . "\n\n"
. "Geef terug als JSON: { \"risico\": \"low|medium|high\", \"reden\": \"max 1 zin\" }.";
$resultaat = aiwoo_call_openai( $prompt );
if ( is_wp_error( $resultaat ) ) return;
$data = json_decode( trim( $resultaat, "` \n" ), true );
if ( ! empty( $data['risico'] ) && $data['risico'] !== 'low' ) {
$order->update_meta_data( '_ai_risk', $data['risico'] );
$order->update_meta_data( '_ai_risk_reden', $data['reden'] ?? '' );
$order->add_order_note( "AI-screening: {$data['risico']} — {$data['reden']}" );
$order->save();
}
}, 30, 1 );
Combineer met een filter op de orderlijst die orders met _ai_risk = high rood kleurt. Dat is een uurtje extra werk, maar je kantooruren-team weet meteen wat ze als eerste moeten oppakken.
Use-case 3 — AI-productbeschrijving bij nieuwe SKU
Maak nieuwe producten af voordat je ‘r überhaupt naar kijkt. Triggeren bij transition_post_status van product-status auto-draft → publish (eerste publish-actie):
add_action( 'transition_post_status', function( $new, $old, $post ) {
if ( $post->post_type !== 'product' ) return;
if ( $old !== 'auto-draft' || $new !== 'publish' ) return;
$product = wc_get_product( $post->ID );
$titel = $product->get_name();
$cats = wp_get_post_terms( $post->ID, 'product_cat', [ 'fields' => 'names' ] );
if ( ! empty( $product->get_description() ) ) return; // alleen als leeg
$prompt = "Schrijf een productbeschrijving van 100 woorden voor:\n"
. "Product: {$titel}\nCategorie: " . implode( ', ', $cats ) . "\n"
. "Tone: droog, direct, geen marketing-clichés.\n"
. "Structuur: haak-zin, 3 benefits in bullets, zachte CTA-zin.";
$tekst = aiwoo_call_openai( $prompt );
if ( ! is_wp_error( $tekst ) ) {
wp_update_post( [ 'ID' => $post->ID, 'post_content' => $tekst ] );
update_post_meta( $post->ID, '_ai_draft', 'true' );
}
}, 10, 3 );
Filter daarna in je Admin product-list op _ai_draft = true om snel alle AI-concepten te reviewen vóórdat je ze écht naar de winkel laat gaan. Voeg een “Goedgekeurd”-vinkje toe als je strikt wilt zijn.
Use-case 4 — AI-samenvatting bij elke nieuwe review
Voor merken met veel reviews: laat AI elke review meteen labelen op sentiment + thema, zodat je eind-van-maand-rapportage zichzelf schrijft.
add_action( 'comment_post', function( $comment_id ) {
$comment = get_comment( $comment_id );
if ( $comment->comment_type !== 'review' ) return;
$prompt = "Classificeer deze review.\n\nTekst: \"{$comment->comment_content}\"\n\n"
. "Geef JSON: { \"sentiment\": \"positive|neutral|negative\", "
. "\"thema\": \"product|levering|service|prijs|overig\", \"score\": 1-5 }.";
$resultaat = aiwoo_call_openai( $prompt );
if ( is_wp_error( $resultaat ) ) return;
$data = json_decode( trim( $resultaat, "` \n" ), true );
if ( ! empty( $data ) ) {
update_comment_meta( $comment_id, '_ai_sentiment', $data['sentiment'] );
update_comment_meta( $comment_id, '_ai_thema', $data['thema'] );
}
}, 10, 1 );
Geconcentreerd: een dashboard-widget die _ai_sentiment = negative van afgelopen 14 dagen toont = je zwakke plekken in één blik.
Wat je moet weten
- Synchrone AI-calls in checkout-hooks zijn riskant. Bij Use-case 2: zet ‘m achter
woocommerce_checkout_order_processed(na payment-redirect), niet vóór de betaling, anders schalen 5 trage orders je checkout-time naar 30+ sec. - Logging. Voeg een eigen
error_log()of een Query Monitor-hook toe om mislukte AI-calls te zien. Niets erger dan stilletjes mislukken. - Action Scheduler. Voor zwaardere of bulk-taken: queue een
as_schedule_single_action()zodat de AI-call buiten de request-cyclus loopt. Dat is hét voordeel van WordPress. - Privacy. Stuur niet meer data dan nodig naar OpenAI/Anthropic. Voor klantnamen kan een hash of voornaam-only voldoende zijn.
Volgende stap
Begin met Use-case 1 — het is de minst-enge en levert direct extra service-kwaliteit. Voeg de hook toe op staging, doe 5 testorders, kijk naar de output. Goed? Push naar productie, monitor 1 week.
Wil je dat we deze hooks meteen voor jouw shop opzetten of een review doen op je staging? Vraag een gratis WooCommerce AI-audit aan — we kijken samen welke hooks de grootste hefboom geven voor jouw catalogus.