Polypress WP Registry grade A. No security issues foundWP RegistryNo security issues foundOpen the reportA
Automated RSS-to-WordPress pipeline with AI translation (Claude API). Fetches articles from any feed, translates them into French, optimizes SEO via Yoast, and publishes with images — fully configurable, multi-source ready, with debug logs and CI/CD.
Install
Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/digimarket84/polypress/releases/download/v1.3.4/polypress-1.3.4.zipPlugin WordPress d'automatisation RSS → traduction IA → publication — multi-source, configurable, prêt pour la production.
Présentation
Polypress surveille un flux Atom/RSS, traduit automatiquement chaque nouvel article de l'anglais vers le français grâce à l'API Claude (Anthropic), optimise le SEO via Yoast, télécharge les images dans la médiathèque WordPress, et publie directement — sans intervention manuelle.
Conçu initialement pour traduire les release notes Home Assistant sur GeekLabo.fr, il est architecturé pour devenir multi-source et entièrement paramétrable.
Fonctionnalités
| Fonctionnalité | Détail |
|---|---|
| 🔄 Surveillance cron | Toutes les 6h (configurable : 1h → 24h) |
| 🤖 Traduction IA | Claude Opus / Sonnet / Haiku via l'API Anthropic |
| 🖼 Images locales | Téléchargement automatique dans la médiathèque WP |
| 🔍 SEO automatique | meta_title, meta_description, slug, focus_keyword, tags via Yoast |
| 🔗 Lien source | Ajout automatique de l'article original (EN) en bas de page |
| ⏩ Rattrapage | Traitement manuel des articles historiques |
| 🐛 Logs multi-niveaux | DEBUG / INFO / WARNING / ERROR avec rotation à 5 Mo |
| 🔒 Sécurité | SSRF, CSRF, rate limiting, chiffrement clé API (libsodium) |
| 🔧 Onglet Avancé | Modèle, catégories, intervalle cron, URL source — tout configurable depuis l'admin |
Installation
1. Clé API Claude
Créez votre clé sur console.anthropic.com → API Keys → Create Key.
2. Configuration WordPress
Ajoutez dans votre wp-config.php (avant /* That's all, stop editing! */) :
// Polypress — obligatoire
define('POLYPRESS_CLAUDE_API_KEY', 'sk-ant-api03-...');
// Optionnel — debug
define('POLYPRESS_DEBUG', true);
define('POLYPRESS_LOG_LEVEL', 1); // 0=DEBUG 1=INFO 2=WARNING 3=ERROR
// Optionnel — surcharger le modèle Claude
define('POLYPRESS_CLAUDE_MODEL', 'claude-opus-4-5');
Sécurité : la clé API ne doit jamais être stockée dans la base de données ni commitée dans Git. La définir dans
wp-config.phpla garde hors d'atteinte du code versionnés.
3. Installation du plugin
Via GitHub Releases (recommandé) :
- Téléchargez
polypress-x.x.x.zipdepuis la page Releases - WordPress Admin → Extensions → Ajouter → Téléverser une extension
- Sélectionnez le ZIP → Installer maintenant → Activer
Via Git (développement) :
cd /var/www/html/wp-content/plugins/
git clone https://github.com/digimarket84/Polypress.git polypress
Utilisation
Premier démarrage
Après activation, rendez-vous sur Réglages → Polypress :
- Onglet Réglages : vérifiez que l'API Claude est marquée ✅
- Onglet Avancé : configurez les catégories WordPress cibles, le modèle Claude, l'intervalle cron
- Cliquez ⏩ Rattraper les articles 2026 pour traiter les releases historiques
Fonctionnement automatique
Le cron WordPress vérifie le flux toutes les 6h (par défaut). Chaque nouvelle release est :
- Récupérée depuis le flux Atom
- Traduite EN→FR (Claude)
- Optimisée SEO (Claude)
- Images téléchargées dans la médiathèque
- Publiée directement (statut
publish)
Configuration avancée
Tout est accessible depuis Réglages → Polypress → 🔧 Avancé :
| Paramètre | Défaut | Description |
|---|---|---|
| Modèle Claude | claude-opus-4-5 |
Surchargeble via POLYPRESS_CLAUDE_MODEL |
| Niveau de log | INFO |
Surchargeble via POLYPRESS_LOG_LEVEL |
| Intervalle cron | 6h | Toutes les 1h / 2h / 3h / 6h / 12h / 24h |
| Catégorie principale | ID 2 | Dropdown des catégories WP |
| Catégorie secondaire | ID 4 | Dropdown des catégories WP |
| URL flux Atom | HA Blog | Modifiable → adapte automatiquement la protection SSRF |
| Articles max / passage | 3 | Limite pour éviter les timeouts PHP |
Priorité des réglages
wp-config.php constant > BDD (onglet Avancé) > valeur par défaut
Architecture
polypress/
├── polypress.php ← Point d'entrée, hooks, cron
├── uninstall.php ← Nettoyage complet
├── includes/
│ ├── class-polypress-pipeline.php ← Orchestration du pipeline
│ ├── class-polypress-feed-fetcher.php ← Fetch + parse Atom/RSS
│ ├── class-polypress-translator.php ← API Claude (traduction + SEO)
│ ├── class-polypress-image-handler.php ← Images → médiathèque WP
│ ├── class-polypress-publisher.php ← wp_insert_post + Yoast + tags
│ └── class-polypress-logger.php ← Logs multi-niveaux + rotation
├── admin/
│ ├── class-polypress-admin.php ← Menu, settings, AJAX handlers
│ ├── settings-page.php ← Template admin (3 onglets)
│ └── assets/
│ ├── admin.css
│ └── admin.js
└── .github/
└── workflows/
├── ci.yml ← Lint, PHPCS, PHPStan, sécurité
└── release.yml ← ZIP + GitHub Release automatique
Pipeline de traitement
Flux Atom ──┐
├──► Filtrage release notes
Scraping ───┘ └──► Déduplication (URLs traitées)
│
▼
wp_kses() sanitisation
│
▼
[Claude #1] Traduction EN→FR
│
▼
[Claude #2] JSON SEO (slug, meta, tags)
│
▼
Téléchargement images → médiathèque
│
▼
wp_insert_post (status: publish)
+ Yoast meta + tags + featured image
│
▼
polypress_processed_urls mise à jour
Sécurité
| Menace | Mesure |
|---|---|
| Injection via contenu externe | wp_kses() avant Claude, wp_kses_post() avant BDD |
| SSRF | Whitelist de domaines + wp_safe_remote_get() uniquement |
| CSRF | check_ajax_referer() sur tous les handlers AJAX |
| Clé API exposée | Jamais loggée, jamais affichée, stockée chiffrée (libsodium) |
| Abus déclenchement manuel | Rate limit 3 requêtes/heure par user+IP (transients) |
| Upload images malveillantes | Double validation MIME : wp_check_filetype() + finfo_file() |
CI/CD
Workflow ci.yml (push/PR sur main ou develop)
- PHP Lint sur PHP 7.4, 8.0, 8.1, 8.2
- PHPCS selon les WordPress Coding Standards
- PHPStan niveau 3
- Scan anti-secrets (
sk-ant-hardcodés) - PHPUnit
Workflow release.yml (push tag v*.*.*)
git tag v1.1.0
git push origin v1.1.0
→ Crée automatiquement polypress-1.1.0.zip et publie la GitHub Release.
Développement local
# Dépendances
composer install
# Lint PHP
find . -name "*.php" -not -path "./vendor/*" | xargs php -l
# PHPCS
./vendor/bin/phpcs --standard=WordPress --extensions=php .
# PHPStan
./vendor/bin/phpstan analyse --level=3 polypress.php includes/ admin/
# Tests
./vendor/bin/phpunit
Roadmap
- [ ] Support multi-sources (plusieurs flux configurables)
- [ ] Interface de gestion des catchup URLs
- [ ] Prévisualisation avant publication (mode draft optionnel)
- [ ] Support d'autres langues cibles
- [ ] Webhook au lieu du cron (pour les sources qui le supportent)
- [ ] Compatibilité RankMath en plus de Yoast SEO
Licence
GNU General Public License v3.0 — voir LICENSE
Copyright © 2026 Guillaume JEUDY
Crédits
- Anthropic Claude — API de traduction et génération SEO
- Home Assistant — Source des articles traduits
- GeekLabo.fr — Blog de destination
Releases
10 releases. Each count is every asset in that release; expand a row for the breakdown.