# Prompts optimisés pour le développement du plugin WooCommerce Projects

## 1. Structure de base du plugin

### 1.1 Création du fichier principal
```
Crée le fichier principal du plugin "WooCommerce Projects" (woocommerce-projects.php) avec les informations suivantes :
- En-tête de plugin (Plugin Name, Description, Version, Author, etc.)
- Vérification de l'accès direct au fichier
- Définition des constantes de base (WCPROJECTS_VERSION, WCPROJECTS_PLUGIN_DIR, WCPROJECTS_PLUGIN_URL)
- Vérification que WooCommerce est actif avant de charger le plugin
```

### 1.2 Création de la classe principale
```
Crée une classe principale 'WooCommerce_Projects' qui sera instanciée en singleton avec :
- Une méthode statique instance() pour accéder à l'instance
- Un constructeur privé qui initialise les hooks principaux
- Une méthode includes() qui chargera les différentes classes
- Une méthode init() qui lance l'initialisation du plugin
```

### 1.3 Création de l'autoloader
```
Crée une classe Autoloader pour le plugin WooCommerce Projects qui :
- Utilise spl_autoload_register
- Gère le chargement automatique des classes en fonction de leur namespace
- Convertit les namespaces et noms de classes en chemins de fichiers
- Recherche les classes dans les dossiers includes, includes/frontend et includes/backend
```

### 1.4 Structure des dossiers et fichiers
```
Liste tous les dossiers et fichiers initiaux à créer pour le plugin :
- includes/class-autoloader.php 
- includes/class-project-post-type.php
- includes/frontend/class-frontend-assets.php
- includes/frontend/class-project-save.php
- includes/frontend/class-my-account.php
- includes/backend/class-backend-assets.php
- includes/backend/class-admin-metabox.php
- includes/frontend/assets/css/ (dossier vide)
- includes/frontend/assets/js/ (dossier vide)
- includes/backend/assets/css/ (dossier vide)
- includes/backend/assets/js/ (dossier vide)
```

## 2. Custom Post Type "Projet"

### 2.1 Création du CPT de base
```
Crée la classe Project_Post_Type avec une méthode register_post_type() qui :
- Définit un CPT 'project' avec les bonnes étiquettes (Projets, Projet)
- Configure le post type comme non-public mais accessible dans l'admin
- Intègre le CPT dans le menu WooCommerce via l'argument 'show_in_menu'
- Active le support pour title, editor et custom-fields
- Enregistre cette fonction sur le hook 'init'
```

### 2.2 Colonnes admin pour le CPT
```
Ajoute à la classe Project_Post_Type les méthodes pour :
- Définir les colonnes personnalisées dans l'admin (project_id, user, related_product)
- Remplir ces colonnes avec les données appropriées
- Rendre ces colonnes triables si possible
- Utiliser les hooks 'manage_project_posts_columns' et 'manage_project_posts_custom_column'
```

### 2.3 Métabox principale
```
Crée une métabox principale pour le CPT project avec :
- Un titre "Configuration du projet"
- Des champs pour afficher : ID du projet, utilisateur associé, produit lié, variation sélectionnée
- Un rendu HTML clair et organisé
- Utilise add_meta_box() dans le hook 'add_meta_boxes'
```

## 3. Enregistrement d'un projet (frontend)

### 3.1 Ajout du bouton sur la page produit
```
Crée une classe Project_Save dans le dossier frontend avec :
- Une méthode pour ajouter un bouton "Enregistrer ce projet" sur les pages de produits variables uniquement
- Un hook sur 'woocommerce_after_add_to_cart_button' ou 'woocommerce_after_variations_form'
- Une vérification que l'utilisateur est connecté avant d'afficher le bouton
```

### 3.2 Script JS pour la capture des données
```
Crée un fichier JavaScript pour :
- Capturer les variations et attributs sélectionnés sur la page produit
- Préparer les données à envoyer via Ajax
- Inclure le nonce de sécurité
- Gérer l'affichage des messages de succès ou d'erreur
```

### 3.3 Endpoint Ajax pour l'enregistrement
```
Développe l'endpoint Ajax dans la classe Project_Save :
- Enregistre les actions wp_ajax_ et wp_ajax_nopriv_
- Vérifie le nonce et que l'utilisateur est connecté
- Récupère et sanitize les données envoyées (product_id, variation_id, attributes)
- Crée un nouveau post de type "project" avec wp_insert_post()
- Stocke les métadonnées avec update_post_meta()
- Retourne une réponse JSON appropriée
```

## 4. Espace client WooCommerce

### 4.1 Ajout de l'endpoint "projects"
```
Crée une classe My_Account dans le dossier frontend qui :
- Enregistre un nouvel endpoint "projects" pour "Mon compte"
- Ajoute un nouvel onglet "Mes projets" dans le menu
- Utilise les hooks 'woocommerce_account_menu_items' et 'woocommerce_endpoint_projects_title'
- Enregistre l'endpoint avec flush_rewrite_rules() à l'activation du plugin
```

### 4.2 Template pour la liste des projets
```
Développe le template pour afficher les projets de l'utilisateur :
- Récupère tous les projets du utilisateur connecté via WP_Query
- Crée une table/liste avec colonnes : nom du projet, produit lié, attributs, actions
- Ajoute un bouton "Ajouter au panier" pour chaque projet
- Gère le cas où l'utilisateur n'a pas de projets
```

### 4.3 Fonction d'ajout au panier
```
Crée une fonction dans la classe My_Account pour :
- Récupérer les données d'un projet par son ID
- Extraire l'ID du produit, l'ID de variation et les attributs
- Appeler WC()->cart->add_to_cart() avec les bons paramètres
- Rediriger vers le panier ou afficher un message de succès
```

## 5. Intégration avec "dynamic-price-for-woocommerce"

### 5.1 Métadonnées spécifiques
```
Modifie la fonction de sauvegarde de projet pour :
- Détecter si "dynamic-price-for-woocommerce" est actif
- Isoler les attributs de variation réels (couleurs) des attributs simulés
- Stocker ces deux types d'attributs dans des métadonnées séparées
- Ajouter une métadonnée pour indiquer que ce projet utilise des prix dynamiques
```

### 5.2 Adaptation de l'ajout au panier
```
Modifie la fonction d'ajout au panier pour :
- Récupérer les attributs simulés d'un projet
- Les formater en tant que "cart item data" compatible
- Passer ces données à WC()->cart->add_to_cart() via le paramètre $cart_item_data
- S'assurer que le hook de recalcul de prix de "dynamic-price-for-woocommerce" est déclenché
```

### 5.3 Interface utilisateur adaptée
```
Adapte l'interface "Mes projets" pour :
- Afficher distinctement les attributs réels et simulés
- Montrer le prix dynamique calculé si possible
- Clarifier à l'utilisateur comment ces attributs affectent le prix
```

## 6. Interface d'administration

### 6.1 Métabox d'édition principale
```
Crée une classe Admin_Metabox dans le dossier backend qui :
- Ajoute une métabox "Détails du projet" dans l'écran d'édition
- Crée des champs pour modifier : produit lié, variation, attributs simulés
- Inclut les sélecteurs appropriés pour chaque type de donnée
- Utilise le hook 'add_meta_boxes'
```

### 6.2 Sélecteurs dynamiques JS
```
Développe un script JavaScript admin pour :
- Charger dynamiquement les variations disponibles quand un produit est sélectionné
- Mettre à jour les options d'attributs quand une variation est choisie
- Gérer l'ajout/suppression d'attributs simulés
- Valider les données avant soumission
```

### 6.3 Sauvegarde des modifications
```
Crée une fonction dans Admin_Metabox pour :
- Intercepter la sauvegarde du post avec le hook 'save_post_project'
- Valider et sanitizer toutes les données soumises
- Mettre à jour les métadonnées avec update_post_meta()
- Gérer les erreurs et afficher des messages appropriés
```

## 7. Ajout au panier technique

### 7.1 Hook d'action personnalisé
```
Crée un hook d'action personnalisé pour l'ajout au panier :
- Définir une URL avec paramètres pour l'action (project_id, nonce)
- Enregistrer une fonction sur 'init' qui intercepte cette action
- Vérifier le nonce et les permissions
- Exécuter l'ajout au panier et rediriger
```

### 7.2 Gestion des attributs spéciaux
```
Développe une fonction spécifique pour :
- Récupérer tous les attributs (réels et simulés) d'un projet
- Les formater correctement pour l'ajout au panier
- Gérer les cas spéciaux comme les attributs numériques ou booléens
- Assurer la compatibilité avec les autres plugins comme "dynamic-price-for-woocommerce"
```

### 7.3 Notifications et redirections
```
Implémente un système de notifications pour :
- Afficher un message de succès après l'ajout au panier
- Gérer les erreurs (produit indisponible, variation inexistante)
- Proposer des options de redirection (continuer les achats, aller au panier)
- Utiliser les fonctions WooCommerce comme wc_add_notice()
```

## 8. Identifiants uniques

### 8.1 Génération d'ID
```
Crée une fonction utilitaire pour :
- Générer un UUID unique avec wp_generate_uuid4()
- Vérifier qu'il n'existe pas déjà dans la base
- Formater l'UUID selon un modèle personnalisé si nécessaire (ex: PRJ-xxxx-xxxx)
- Stocker l'ID dans la métadonnée 'project_id'
```

### 8.2 Intégration automatique
```
Modifie la fonction de création de projet pour :
- Appeler automatiquement la génération d'ID lors de la création
- Utiliser le hook 'wp_insert_post' pour garantir que l'ID est généré même si le projet est créé par d'autres moyens
- Vérifier et réparer les projets sans ID existants
```

### 8.3 Utilisation dans l'interface
```
Adapte les interfaces pour :
- Afficher l'ID unique dans la liste admin
- Montrer l'ID dans l'espace "Mes projets" du client
- Utiliser l'ID dans les URLs ou comme référence
```

## 9. Nettoyage et désinstallation

### 9.1 Hook de désinstallation
```
Crée un fichier uninstall.php à la racine du plugin qui :
- Vérifie que la désinstallation est demandée par WordPress
- Récupère tous les posts de type 'project'
- Supprime ces posts avec wp_delete_post()
- Nettoie les métadonnées orphelines
```

### 9.2 Hook de suppression d'utilisateur
```
Implémente une fonction sur le hook 'delete_user' qui :
- Récupère tous les projets appartenant à l'utilisateur supprimé
- Décide s'il faut les supprimer ou les réassigner
- Exécute la suppression ou réassignation
```

### 9.3 Fonction de maintenance
```
Crée une fonction admin optionnelle pour :
- Nettoyer les projets orphelins (sans produit ou variation valide)
- Corriger les métadonnées invalides
- Régénérer les IDs manquants
- Journaliser les actions effectuées
```

## 10. Assets (CSS et JS)

### 10.1 Enregistrement des assets frontend
```
Crée une classe Frontend_Assets qui :
- Enregistre les fichiers CSS et JS du frontend
- Utilise wp_register_style() et wp_register_script()
- Charge les assets conditionnellement selon les pages
- Gère les dépendances comme jQuery ou les styles WooCommerce
```

### 10.2 Enregistrement des assets backend
```
Crée une classe Backend_Assets qui :
- Enregistre les fichiers CSS et JS pour l'admin
- Charge les assets uniquement sur les pages d'édition de projets
- Ajoute les dépendances nécessaires
- Utilise les hooks 'admin_enqueue_scripts'
```

### 10.3 Création des fichiers CSS/JS
```
Développe les fichiers CSS et JS de base pour :
- CSS frontend : styles des boutons, notifications, tableaux de projets
- JS frontend : fonctions Ajax, validation des formulaires
- CSS backend : styles des métaboxes et champs d'édition
- JS backend : sélecteurs dynamiques, validation
```

## 11. Sécurité et bonnes pratiques

### 11.1 Fonctions de validation
```
Crée une classe utilitaire avec des méthodes statiques pour :
- Valider et sanitizer les entrées utilisateur
- Vérifier les types de données (entiers, chaînes, tableaux)
- Échapper les sorties HTML avec esc_html(), esc_attr()
- Formater les données pour stockage en BDD
```

### 11.2 Vérifications de sécurité
```
Implémente des vérifications systématiques dans toutes les fonctions :
- Utilisation de nonces pour chaque formulaire et action Ajax
- Vérification des capacités utilisateur avant chaque action
- Limitation des requêtes Ajax par utilisateur/IP
- Journalisation des tentatives suspectes
```

### 11.3 Conformité aux standards
```
Assure la conformité aux standards WordPress :
- Respecter les conventions de nommage WordPress
- Documenter toutes les fonctions avec DocBlocks
- Suivre les recommandations du WordPress Coding Standards
- Préfixer toutes les fonctions et classes pour éviter les conflits
```
