Plugin WordPress rédaction de contenu

Pour générer 50 articles, personne ne veut cliquer 50 fois. Le plugin inclut un système de queue :

  • ajout de mots-clés en batch
  • traitement séquentiel (respect des rate limits API)
  • statuts par article (pending → processing → completed/failed)
  • reprise après interruption

La table custom {prefix}_scg_queue stocke l'état de chaque tâche.

Ce que j'ai appris en construisant ça

Prompt engineering, c'est 80% du travail. Le code est simple. Faire en sorte que l'IA produise un output exploitable et constant, c'est autre chose. J'ai itéré des dizaines de fois sur les prompts avant d'avoir un résultat stable.

Les APIs IA sont fragiles. Timeout, rate limit, formats de réponse qui changent... Il faut tout anticiper. Un plugin "production-ready" passe plus de temps à gérer les erreurs qu'à faire le travail nominal.

WordPress a ses patterns. Hooks, filters, options API, AJAX admin... Une fois qu'on les maîtrise, c'est puissant. Avant ça, c'est le chaos.

Résultats concrets

  • Temps de production d'un article : 2h → 5 minutes
  • Coût par article : ~0.15€ (Claude Sonnet) à ~0.80€ (Claude Opus) + 0.15€ (Semrank)

Pour mes petits sites de vente de liensil fait le job et ça rank !

Réglages des prompts pour la rédaction

L'intégration Semrank (la vraie valeur ajoutée)

Le plugin peut fonctionner en mode "IA seule", mais sa force c'est le mode Semrank.

Réglage des clés API

L'API Semrank fournit des données fraîches :

  • intention de recherche détectée
  • mots-clés must-have et secondaires
  • questions PAA (People Also Ask)
  • analyse des 10 premiers résultats Google (titres, word count, structure Hn)

Ces données sont injectées directement dans le prompt Architecte. L'IA ne devine plus, elle s'appuie sur la réalité de la SERP.

Architecture technique

Stack utilisée

  • PHP 7.4+ (compatible 8.x)
  • WordPress 5.8+
  • APIs : Claude (Anthropic), Gemini (Google), OpenAI, Semrank

Structure du plugin

seo-content-generator/
├── seo-content-generator.php → Bootstrap + classe principale (Singleton)
├── includes/
│ ├── class-settings.php → Gestion des options + chiffrement
│ ├── class-generator.php → Orchestration du workflow
│ ├── class-claude-api.php → Client API Claude
│ ├── class-gemini-api.php → Client API Gemini
│ ├── class-openai-api.php → Client API OpenAI
│ ├── class-semrank-api.php → Client API Semrank
│ ├── class-queue.php → File d'attente (génération en masse)
│ ├── class-ajax.php → Endpoints AJAX admin
│ ├── class-schema.php → Génération FAQ Schema JSON-LD
│ └── class-admin.php → Interface d'administration
├── templates/ → Vues admin
└── assets/ → CSS/JS

Les points techniques dont je suis fier

1. Chiffrement des clés API (AES-256-GCM)

Les clés API ne sont jamais stockées en clair. J'utilise libsodium (natif PHP 7.2+) avec un fallback OpenSSL :

// Nonce unique par chiffrement + clé dérivée des constantes WordPress
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$ciphertext = sodium_crypto_secretbox($key, $nonce, $encryption_key);

La clé de chiffrement est dérivée des AUTH_KEY, SECURE_AUTH_KEY + un secret propre au plugin. Même avec un accès BDD, les clés sont inexploitables.

2. Retry automatique intelligent

Les APIs IA sont capricieuses. Rate limit (429), surcharge (529)... Le plugin gère ça automatiquement :

// Délai exponentiel : 15s → 30s → 60s
$wait_time = $base_wait * pow(2, $retry_count);
sleep($wait_time);
return $this->generate_content($prompt, $model, $retry_count + 1);

3 tentatives avant abandon. L'utilisateur ne voit rien, ça "just works".

3. Parser Markdown → HTML robuste

L'IA renvoie du Markdown. WordPress attend du HTML. J'ai construit un parser qui gère :

  • headers (H1-H6)
  • listes à puces et numérotées
  • tableaux Markdown (transformés en <table> propres)
  • blockquotes
  • gras/italique imbriqués

Le tout avec échappement XSS : le HTML dangereux est neutralisé avant conversion.

4. Extraction intelligente des métadonnées

L'IA ne renvoie pas toujours le format demandé. J'ai implémenté un parser multi-format qui détecte :

Format A : ===METADATA=== / ===CONTENT===
Format B : A. BALISE TITLE / B. META DESCRIPTION...
Format C : **BALISE TITLE:** valeur

Si un format échoue, le suivant prend le relais. Taux de parsing réussi : ~98%.

5. Compatibilité plugins SEO

Les métadonnées sont automatiquement injectées dans :

  • Yoast SEO (_yoast_wpseo_title, _yoast_wpseo_metadesc)
  • Rank Math (rank_math_title, rank_math_description)
  • All in One SEO (_aioseo_description)

Pas de configuration, ça détecte et s'adapte.

Sécurité — ce que j'ai mis en place

RisqueProtection
Injection SQLRequêtes préparées via $wpdb->prepare()
XSSsanitize_text_field(), wp_kses_post(), échappement HTML
CSRFNonces WordPress sur tous les endpoints AJAX
Clés API exposéesChiffrement AES-256-GCM + dérivation de clé
Modes/statuts invalidesValidation whitelist stricte
Surcharge serveurRate limiting configurable

File d'attente : génération en masse

Fenêtre pour rédiger des articles en masse

Pour générer 50 articles, personne ne veut cliquer 50 fois. Le plugin inclut un système de queue :

  • ajout de mots-clés en batch
  • traitement séquentiel (respect des rate limits API)
  • statuts par article (pending → processing → completed/failed)
  • reprise après interruption

La table custom {prefix}_scg_queue stocke l'état de chaque tâche.

Ce que j'ai appris en construisant ça

Prompt engineering, c'est 80% du travail. Le code est simple. Faire en sorte que l'IA produise un output exploitable et constant, c'est autre chose. J'ai itéré des dizaines de fois sur les prompts avant d'avoir un résultat stable.

Les APIs IA sont fragiles. Timeout, rate limit, formats de réponse qui changent... Il faut tout anticiper. Un plugin "production-ready" passe plus de temps à gérer les erreurs qu'à faire le travail nominal.

WordPress a ses patterns. Hooks, filters, options API, AJAX admin... Une fois qu'on les maîtrise, c'est puissant. Avant ça, c'est le chaos.

Résultats concrets

  • Temps de production d'un article : 2h → 5 minutes
  • Coût par article : ~0.15€ (Claude Sonnet) à ~0.80€ (Claude Opus) + 0.15€ (Semrank)

Pour mes petits sites de vente de liensil fait le job et ça rank !

Fenêtre pour rédiger des articles à l'unité