« Trente pour cent à la commande, quarante pour cent au lancement de production, le solde à la livraison. » Cette répartition, classique dans l’industrie manufacturière pour une commande sur mesure de plusieurs milliers d’euros, ne correspond à aucun mécanisme natif de WooCommerce, pensé par défaut pour un paiement unique et immédiat. Ce billet ne traite pas la gestion des tarifs différenciés par rôle client, déjà couverte séparément, mais construit une architecture de facturation par acomptes échelonnés adaptée à ce contexte B2B précis.
Penser la commande comme une suite d’étapes liées
Plutôt que de forcer un seul produit WooCommerce à représenter l’intégralité d’une commande industrielle, la structure la plus robuste consiste à créer une commande parente qui représente le contrat global, puis à générer des commandes enfants représentant chaque acompte, reliées entre elles par une métadonnée commune. Cette séparation permet à chaque acompte de suivre son propre cycle de paiement — en attente, payé, en retard — sans que l’état d’un acompte n’affecte artificiellement celui des autres.
function wpm_creer_commande_acompte( $commande_parente_id, $montant, $libelle ) {
$acompte = wc_create_order( array(
'customer_id' => wc_get_order( $commande_parente_id )->get_customer_id(),
) );
$acompte->add_product( wpm_produit_acompte(), 1, array( 'subtotal' => $montant, 'total' => $montant ) );
$acompte->update_meta_data( '_commande_parente', $commande_parente_id );
$acompte->update_meta_data( '_libelle_etape', $libelle );
$acompte->calculate_totals();
$acompte->save();
return $acompte->get_id();
}
Déclencher chaque acompte au bon moment

Le premier acompte se génère et se facture dès la validation de la commande parente. Les acomptes suivants, eux, ne doivent pas être facturés automatiquement à une date fixe, mais déclenchés manuellement par le service commercial ou de production, au moment réel où l’étape correspondante est atteinte — lancement de production, expédition. Une action personnalisée dans l’administration WordPress, accessible depuis la fiche de la commande parente, permet de générer l’acompte suivant en un clic, avec envoi automatique du lien de paiement au client :
add_action( 'admin_post_wpm_declencher_acompte_suivant', function() {
$commande_parente_id = absint( $_GET['commande_id'] ?? 0 );
$acompte_id = wpm_creer_commande_acompte( $commande_parente_id, 4000, 'Lancement de production' );
$acompte = wc_get_order( $acompte_id );
WC()->mailer()->emails['WC_Email_Customer_Invoice']->trigger( $acompte_id );
wp_safe_redirect( admin_url( 'post.php?post=' . $commande_parente_id . '&action;=edit' ) );
exit;
} );
Suivre l’état global du contrat
La commande parente doit afficher, dans son interface d’administration, un récapitulatif clair de l’avancement : montant total du contrat, somme des acomptes déjà réglés, solde restant, et statut de chaque étape. Cette vue se construit en interrogeant les commandes enfants liées par la métadonnée _commande_parente :
function wpm_recapitulatif_contrat( $commande_parente_id ) {
$acomptes = wc_get_orders( array(
'meta_key' => '_commande_parente',
'meta_value' => $commande_parente_id,
'limit' => -1,
) );
$total_regle = 0;
foreach ( $acomptes as $acompte ) {
if ( $acompte->is_paid() ) {
$total_regle += $acompte->get_total();
}
}
return $total_regle;
}
Ne déclencher le solde qu’après validation complète
Le dernier acompte, correspondant au solde, ne doit se générer qu’une fois toutes les étapes intermédiaires confirmées comme payées, jamais sur une simple date planifiée. Un contrôle explicite avant génération évite d’envoyer par erreur une demande de solde alors qu’un acompte intermédiaire reste impayé, une situation qui créerait une confusion difficile à rattraper commercialement.
Ce que cette architecture n’automatise pas
- Le déclenchement de chaque étape reste une décision humaine, liée à l’avancement réel de la production.
- Les relances en cas de retard de paiement d’un acompte intermédiaire se gèrent manuellement ou via un système d’alerte séparé.
- La consolidation comptable finale, avec facture globale récapitulative, se construit à partir des commandes enfants une fois le contrat soldé.
Documentez toujours par écrit, en dehors de WooCommerce, l’échéancier contractuel validé avec le client : le système de commandes enfants reflète cet échéancier, il ne s’y substitue pas juridiquement.
En résumé
Facturer des acomptes échelonnés liés à l’avancement d’une commande industrielle demande de sortir du modèle de commande unique natif de WooCommerce, au profit d’une commande parente reliée à des commandes enfants représentant chaque étape. Cette architecture, plus proche d’un système de facturation de projet que d’une boutique classique, s’appuie néanmoins entièrement sur les fonctions natives WooCommerce, sans extension tierce complexe.