Générateur de plugin WordPress moderne — PSR-4, DDD léger, PHP 8.4

Génère un squelette de plugin WordPress propre en quelques clics. Architecture PSR-4, custom post types et taxonomies typés, repository avec interface et DTO en lecture seule — toutes les briques d'un plugin maintenable, prêtes à recevoir ta logique métier. Conforme aux standards WordPress et PHP 8.4, livré en ZIP avec un README. Gratuit, sans inscription, sans tracking.

Configurateur

Métadonnées du plugin
Custom Post Types (max 5, optionnel)

Aperçu

<?php

/**
 * Plugin Name:       Acme Movies
 * Requires PHP:      8.4
 * License:           GPL-2.0-or-later
 */

declare(strict_types=1);

namespace Acme\Movies;

use Acme\Movies\Plugin\Plugin;

if (! defined('ABSPATH')) {
    exit;
}

(new Plugin())->registerHooks();
<?php

declare(strict_types=1);

namespace Acme\Movies\Domain\Movie;

use DateTimeImmutable;

final readonly class Movie
{
    public function __construct(
        public int $id,
        public string $title,
        public string $slug,
        public string $content,
        public string $excerpt,
        public ?string $thumbnailUrl,
        public DateTimeImmutable $publishedAt,
    ) {
    }
}

Avantages de l'architecture

  • PSR-4 et namespaces stricts — Autoload Composer standard, IDE et PHPStan comprennent ton code, fini les require_once partout.
  • Bounded contexts par CPT — Chaque type de contenu vit dans son dossier (Domain/Movie/), sans dépendre des autres. Tu peux supprimer un CPT en supprimant son dossier.
  • DTO immutable, typé en lecture seule — final readonly class Movie avec props typées. Tes consommateurs (thème, blocks Gutenberg, REST) manipulent un contrat clair, pas du WP_Post magique.
  • Repository avec interface — Testabilité immédiate (mock l'interface en test), substituabilité (passer en cache, en remote API, sans toucher au consommateur).
  • Standards WordPress respectés — Nonces sur les meta-boxes, sanitize/escape dans les meta saves, __() et esc_html__() sur tous les labels, capability checks.

Compatibilité versions

PHP 8.2PHP 8.3PHP 8.4PHP 8.5
WordPress 6.4 ✓ ~ ✕ ✕
WordPress 6.5 ✓ ~ ✕ ✕
WordPress 6.6 ✓ ✓ ~ ✕
WordPress 6.7 ✓ ✓ ~ ✕
WordPress 6.8 ✓ ✓ β ✕

✓ officiellement supporté · β supporté en beta · ~ non testé par WP core (peut fonctionner) · ✕ non supporté.

Le code généré utilise final readonly class et nécessite PHP 8.2 minimum. Le tableau reflète le support officiel de WordPress core (référence) ; le plugin lui-même tourne sur n'importe quel PHP >= 8.2 si l'environnement le permet.

Exemples générés

  • Blog photo — 1 CPT photo avec taxonomie album, Featured activé. 13 fichiers, ~12 Ko zippés.
  • Multi-CPT magazine — 3 CPT (article, interview, video) avec leurs taxonomies, Featured sur les articles. 26 fichiers, ~22 Ko zippés.
  • Annuaire d'événements — 1 CPT event avec une taxonomie location. 13 fichiers, ~12 Ko zippés.

Pour aller plus loin

Questions fréquentes

À qui s'adresse ce générateur ?

Aux développeurs WordPress qui veulent démarrer un plugin sur des bases saines : namespaces PSR-4, types stricts, séparation par contexte métier, repository pattern. Si tu cherches un plugin générique sans architecture, le générateur officiel WordPress.org reste plus adapté.

Quelle est la licence du code généré ?

GPL-2.0-or-later par défaut (compatible WordPress core). Tu peux choisir GPL-3.0-or-later ou MIT dans le formulaire. Le code généré est libre de droits — fais-en ce que tu veux, y compris le distribuer commercialement.

Pourquoi composer install est-il nécessaire après installation ?

Le ZIP ne contient pas le dossier vendor/ — pour rester léger (~10 Ko) et te laisser le contrôle de l'autoload. Une fois le plugin uploadé sur ton WordPress, lance composer install à la racine du plugin pour générer l'autoload PSR-4. C'est une étape de dev, pas de runtime.

Le plugin généré a-t-il des dépendances externes ?

Aucune en runtime. Le composer.json ne déclare que php >= 8.4. Le plugin utilise les fonctions WordPress natives (register_post_type, WP_Query, wp_get_attachment_image_url...) — pas de Timber, pas d'ACF, pas de Carbon Fields requis. Tu peux les ajouter ensuite si ton projet en a besoin.

Pourquoi un DTO Movie plutôt que WP_Post directement ?

Pour que ton thème (ou tout consommateur) manipule des objets typés ($movie->title, autocomplétion, PHPStan strict) au lieu de $post->post_title. Le DTO sert aussi de point d'isolation : si tu changes la source de données un jour (REST, GraphQL, base externe), tu modifies seulement le repository — le reste du code consommateur ne bouge pas.

Mes données sont-elles stockées par le générateur ?

Le ZIP est généré à la volée puis le fichier temporaire est supprimé après envoi. Aucune analytics tierce, aucun cookie de tracking sur cette page. Pour la prévention d'abus, un log technique conserve pendant 30 jours : le slug et namespace du plugin, le nom et URL d'auteur que tu saisis, ton IP anonymisée (dernier octet masqué) et le user-agent (tronqué à 200 caractères). Ce log n'est pas exploité à des fins commerciales et n'est partagé avec aucun tiers.

Top