WooCommerce fournit une liste de commandes, une fiche détaillée et un bouton d'impression navigateur. Ce qu'il ne fournit pas, c'est un moyen de faire sortir un ticket d'une machine en cuisine à la seconde où un client paie. C'est ce manque qui fait qu'on cherche encore « impression automatique commande WooCommerce » en 2026.
Réponse courte : accrochez-vous à woocommerce_order_status_processing, construisez le texte du ticket, et envoyez-le à une imprimante joignable depuis internet. Une extension le fait pour vous ; vingt lignes dans une petite extension maison le font exactement comme vous voulez. Les deux fonctionnent sans ordinateur allumé dans la boutique.
Quelle voie choisir
| Voie | Effort | Mise en page | Résiste aux mises à jour du thème | Adapté à |
|---|---|---|---|---|
| Extension connecteur | Installer et configurer | Réglages de gabarit | Oui | La plupart des boutiques, livraisons d'agence |
| Hook personnalisé | ~20 lignes | Totale | Oui, si dans une extension | Logique spécifique, multi-vendeurs |
| Polling WP-Cron | Plus élevé | Totale | Oui | Boutiques où les hooks sont peu fiables |
La voie de l'extension
Le connecteur WooCommerce s'installe comme n'importe quelle extension : activez-la, collez vos identifiants API, choisissez l'imprimante et les statuts de commande qui déclenchent une impression. La documentation de l'extension WooCommerce détaille les réglages, y compris la personnalisation du ticket et l'impression d'un double.
Si votre boutique est une boutique normale, arrêtez-vous ici. La suite de cet article s'adresse aux cas qui ne le sont pas.
La voie du hook
WooCommerce déclenche un hook de statut à chaque changement d'état d'une commande. Celui que vous voulez presque toujours est woocommerce_order_status_processing : il se déclenche une fois le paiement confirmé, quand la commande est prête à être préparée.
<?php
/**
* Plugin Name: Impression des commandes au paiement
* À placer dans wp-content/plugins/, pas dans le functions.php du thème :
* une mise à jour ou un changement de thème arrêterait l'impression sans bruit.
*/
add_action( 'woocommerce_order_status_processing', 'my_print_order', 10, 2 );
function my_print_order( $order_id, $order ) {
// Garde-fou contre la double impression si le statut est posé deux fois.
if ( $order->get_meta( '_printed_at' ) ) {
return;
}
$lignes = array(
'COMMANDE #' . $order->get_order_number(),
$order->get_date_created()->date( 'd/m/Y H:i' ),
'',
);
foreach ( $order->get_items() as $item ) {
$lignes[] = $item->get_quantity() . 'x ' . $item->get_name();
}
$lignes[] = '';
$lignes[] = 'TOTAL : ' . $order->get_total() . ' ' . $order->get_currency();
wp_remote_post(
'https://www.expedy.fr/api/v2/printers/' . MY_PRINTER_UID . '/print',
array(
'timeout' => 5,
'blocking' => false, // ne pas faire attendre le client sur l'imprimante
'headers' => array(
'Authorization' => MY_API_SID . ':' . MY_API_TOKEN,
'Content-Type' => 'application/json',
),
'body' => wp_json_encode(
array(
'printer_msg' => implode( "\n", $lignes ),
'origin' => 'woo-' . $order_id,
)
),
)
);
$order->update_meta_data( '_printed_at', current_time( 'mysql' ) );
$order->save();
}
Trois éléments de ce code sont délibérés.
'blocking' => false. Sans lui, la requête de commande du client attend la réponse de l'API d'impression. Sur une connexion lente, c'est une page de confirmation visiblement plus lente ; et si l'imprimante est injoignable, cela peut ressembler à un échec de commande. Envoyez sans attendre, puis réconciliez séparément.
Le garde-fou _printed_at. Une commande peut entrer plusieurs fois en processing : un callback de passerelle de paiement qui arrive deux fois, un changement de statut manuel, une extension qui ré-enregistre la commande. Sans le garde-fou, chacun de ces cas produit un ticket de plus.
Une extension, pas functions.php. Le code dans le thème meurt avec le thème. Toute agence a hérité d'au moins un site où l'impression s'est arrêtée le jour du changement de thème, sans que personne ne relie les deux événements avant une semaine.
Les pièges propres à WooCommerce
Les statuts ne sont pas universels. Les boutiques en virement bancaire ou en paiement à la livraison ne passent pas par processing de la même façon. Si vos commandes stagnent en on-hold, accrochez ce statut, ou accrochez woocommerce_order_status_changed et décidez dans la fonction.
WP-Cron n'est pas un cron. Si vous vous rabattez sur un polling des commandes non imprimées, souvenez-vous que WP-Cron ne s'exécute que lorsqu'un visiteur arrive. Sur une boutique à faible trafic, une commande peut attendre une heure son ticket. Utilisez un vrai cron système appelant wp-cron.php si vous prenez cette voie.
Le multi-vendeurs. Sur une marketplace WCFM ou Dokan, chaque vendeur a besoin de son imprimante. Le schéma est identique, mais le printer_uid provient des métadonnées du vendeur plutôt que d'une constante : voir la documentation WCFM.
L'encodage des caractères. WordPress stocke volontiers des émojis dans les noms de produits. Les imprimantes thermiques ne les impriment pas, et sur certains modèles une séquence d'octets inattendue fait tomber la connexion. Passez les noms de produits par une translittération avant de construire le ticket.
Aller au-delà du texte brut
Gras, titres double hauteur, logo, QR code, découpe automatique : ce sont des balises dans printer_msg. Commencez par la référence de mise en page, puis l'impression de logo si vous voulez la marque sur le ticket.
Pour démarrer
Créez un compte gratuit, récupérez vos identifiants API, et imprimez un ticket de test avec un simple curl avant même de toucher à WooCommerce. Isoler la chaîne d'impression de la chaîne WordPress fait gagner un temps de débogage étonnant : quand quelque chose casse plus tard, vous savez déjà de quel côté regarder.
FAQ
Quel hook WooCommerce doit déclencher l'impression ?
woocommerce_order_status_processing dans la plupart des boutiques : il se déclenche une fois le paiement confirmé. Les boutiques en virement ou paiement à la livraison auront plutôt besoin de on-hold, ou de woocommerce_order_status_changed avec la décision prise dans la fonction.
Peut-on imprimer les commandes WooCommerce sans extension ?
Oui. Une petite extension maison avec une action sur le hook de statut et un appel wp_remote_post vers l'endpoint d'impression tient en une vingtaine de lignes. Placez-la dans wp-content/plugins/, jamais dans le functions.php du thème.
Pourquoi la commande semble-t-elle plus lente depuis l'ajout de l'impression ?
Parce que l'appel HTTP vers l'API d'impression bloque la requête de commande. Passez 'blocking' => false à wp_remote_post pour que le client n'attende jamais après une imprimante.
Comment éviter qu'une commande s'imprime deux fois ?
Stockez un drapeau meta comme _printed_at sur la commande et sortez de la fonction s'il est déjà posé. Les statuts peuvent être appliqués plusieurs fois par les callbacks de passerelle ou les changements manuels.
Chaque vendeur d'une marketplace peut-il avoir son imprimante ?
Oui. Stockez le printer_uid dans les métadonnées du vendeur et lisez-le au moment de construire l'appel. Les marketplaces WCFM et Dokan se gèrent ainsi.