Aller au contenu

WooCommerce ou Easy Digital Downloads : lequel choisir pour vendre des produits numériques

Comparez WooCommerce et Easy Digital Downloads pour choisir la bonne extension et vendre des produits numériques sur WordPress. Vous allez soupeser la livraison des fichiers, les clés de licence, les abonnements, les taxes canadiennes et européennes, les passerelles et le coût d'hébergement, puis vous engager avec une petite boutique d'essai.

Si vous êtes sur le point de vendre des produits numériques sur WordPress, cet article vous aide, vous et votre développeur, à choisir entre WooCommerce et Easy Digital Downloads (EDD). Produits numériques veut dire ici des fichiers ou des accès livrés en ligne, comme des livres numériques, des licences logicielles, du matériel de cours et des médias de banque. Les deux extensions s’installent gratuitement, alors le vrai coût arrive plus tard, dans les modules payants dont chacune a besoin pour votre situation réelle. En bref, WooCommerce convient si vous vendez aussi du physique ou tenez déjà une boutique WooCommerce, et EDD convient quand les fichiers et les clés sont tout le commerce. À la fin, vous les aurez comparées sur la livraison, les licences, les taxes, les passerelles et le coût d’hébergement, et vous aurez écrit un choix défendable.

Ce que vous allez accomplir

  • Faire correspondre ce que vous vendez à l’une des deux extensions, avec un court arbre de décision plutôt qu’une liste de fonctions.
  • Comprendre comment chacune remet un fichier payé à l’acheteur, et comment empêcher ce lien de circuler.
  • Comparer les deux par facteurs de coût, comme les clés de licence, les abonnements, les taxes et les frais de passerelle, plutôt que par prix affiché.
  • Fixer l’expiration du lien et la limite de téléchargements par commande à des valeurs choisies exprès.
  • Savoir ce que chaque choix coûte à votre serveur en stockage, en bande passante de téléchargement et en croissance des tables de commandes.

Prérequis

  • Un site WordPress 6.4 ou plus récent, sur PHP 8.1 ou plus récent, avec une copie de préproduction que vous pouvez casser.
  • Un accès shell avec l’utilisateur du site, et WP-CLI 2.x (l’outil de ligne de commande de WordPress) présent dans votre path.
  • WooCommerce 8.2 ou plus récent, ou EDD 3.x, selon le côté que vous testez. Les versions antérieures rangent les commandes autrement.
  • Les identifiants de mode test de votre fournisseur de paiement, pour passer une vraie commande sans vrai débit.
  • Une personne capable de répondre aux questions de taxes de vente pour les endroits où vous vendez. Plusieurs décisions ci-dessous sont comptables.

Comment ça fonctionne

Les deux extensions font les mêmes trois choses. Elles encaissent l’argent, écrivent une commande, puis remettent à l’acheteur un lien vers un fichier. Toutes les différences entre elles se placent autour de ces trois étapes.

WooCommerce est un moteur de boutique généraliste. Un produit numérique y est un produit WooCommerce ordinaire avec deux cases cochées, Virtuel et Téléchargeable, et un ou plusieurs fichiers joints. Le reste du moteur reste chargé quand même : zones de livraison, stocks, codes promo, classes de taxe et panier complet. C’est pratique le jour où vous ajoutez un produit physique, et c’est du poids que vous portez sur un site qui n’expédiera jamais de boîte.

EDD est construite uniquement autour des téléchargements. Ses produits vivent dans leur propre type de contenu appelé download, il n’y a pas de livraison, et le panier comme la caisse sont plus légers. Un même téléchargement peut porter plusieurs options de prix, par exemple une licence personnelle et une licence d’équipe, sans la mécanique de produit variable que WooCommerce emploie pour la même idée. Depuis la version 3.0, EDD garde les commandes dans ses propres tables de base de données au lieu de les stocker comme des publications WordPress.

WooCommerce a fait le même virage avec High Performance Order Storage (HPOS), un mode qui garde les commandes dans des tables nommées wp_wc_orders et quelques voisines plutôt que dans wp_posts. HPOS est la valeur par défaut des nouvelles installations depuis la version 8.2. Les deux projets ont changé cela pour la même raison. Les tables de commandes grossissent plus vite que tout le reste d’une boutique, et la table des publications WordPress n’a jamais été taillée pour elles.

La livraison des fichiers est l’endroit où les deux s’entendent sur l’idée et diffèrent sur les réglages par défaut.

Cheminement d'un téléchargement payé : l'acheteur paie à la caisse, la passerelle confirme, l'extension écrit la commande et émet un lien avec jeton, puis le lien est vérifié contre la commande, son expiration et son compte de téléchargements avant que le serveur web diffuse le fichier depuis un dossier protégé

Aucune des deux ne laisse l’acheteur toucher directement au chemin du fichier. WooCommerce range les fichiers téléversés sous wp-content/uploads/woocommerce_uploads/ et EDD utilise wp-content/uploads/edd/. Les deux y écrivent un fichier .htaccess qui dit à Apache de refuser les requêtes directes. Sur nginx, ce fichier est ignoré, alors vous ajoutez vous-même la règle dans la configuration du serveur. L’acheteur reçoit plutôt un lien qui porte un jeton, une chaîne aléatoire qui identifie l’achat. L’extension vérifie la commande, la date d’expiration et le nombre de téléchargements déjà consommés, puis sert le fichier.

La façon dont le fichier quitte le serveur est un réglage, et elle pèse sur le coût d’hébergement. Le téléchargement forcé lit le fichier à travers PHP, ce qui occupe un processus PHP pendant tout le transfert. Sur une vidéo de 900 Mo, cela peut faire plusieurs minutes de processus immobilisé. L’autre méthode confie le travail au serveur web par X-Accel-Redirect sur nginx ou X-Sendfile sur Apache, ce qui libère PHP tout de suite. Au-delà d’environ 200 Mo par fichier, ou pour un catalogue qui vend par vagues, déplacez le stockage vers un service objet comme Amazon S3 et servez des liens signés depuis là. EDD offre un module maison pour Amazon S3 ; sur WooCommerce, vous choisissez un module tiers.

Les facteurs de coût se séparent nettement. EDD inclut Stripe et PayPal dans son cœur gratuit. Ses modules payants couvrent ce dont un commerce de téléchargements a besoin, dont les licences logicielles, les paiements récurrents et les dépôts de vendeurs. WooCommerce inclut des extensions Stripe et PayPal gratuites. Son catalogue payant est bien plus gros, parce qu’il doit aussi couvrir la livraison, les réservations et le point de vente. Dans les deux cas, le coût récurrent tient aux licences annuelles des modules, par site, et aux frais de traitement du fournisseur de paiement. Ajoutez un hébergement dimensionné pour votre bande passante de téléchargement.

Marche à suivre

1. Écrivez ce que vous vendez, puis suivez l’arbre de décision. Listez chaque gamme de produits, y compris celles prévues pour l’an prochain. Marquez chacune comme fichier seul, clé de licence avec mises à jour, abonnement ou produit physique. Ensuite, suivez l’arbre ci-dessous depuis le haut.

Arbre de décision entre WooCommerce et Easy Digital Downloads, avec des embranchements sur les biens physiques, les clés de licence logicielle avec mises à jour, une boutique WooCommerce déjà en place, puis la préférence pour une extension plus légère

La règle est stricte. Une seule gamme physique, actuelle ou prévue, vous envoie vers WooCommerce. Faire tourner deux paniers sur un site coûte plus cher que de porter le code de livraison inutilisé.

2. Notez ce que le site fait tourner aujourd’hui. Lancez ces commandes depuis le dossier WordPress, en préproduction.

wp core version
wp plugin list --status=active --field=name
wp post list --post_type=product --post_status=publish --format=count
6.6.2
woocommerce
woocommerce-gateway-stripe
84

Si EDD est active, wp post list --post_type=download --post_status=publish --format=count donne aussi son nombre de produits. Si l’extension n’est pas active, la même commande signale un type de publication invalide, ce qui est la réponse attendue et non une panne.

3. Protégez le dossier de téléversement avant d’y mettre un fichier payant. Demandez de l’extérieur un fichier dont vous connaissez l’existence.

curl -sI https://example.com/wp-content/uploads/woocommerce_uploads/2026/09/sample.pdf | head -n 1
HTTP/2 403

Un 403 ou un 404 est correct. Un 200 veut dire que le fichier est public et que toutes les limites de lien posées plus tard ne sont que décoration. Sur nginx, ajoutez ce bloc dans le bloc server, puis rechargez.

location ~* /wp-content/uploads/(woocommerce_uploads|edd)/ {
    deny all;
    return 403;
}
sudo nginx -t && sudo systemctl reload nginx
nginx: configuration file /etc/nginx/nginx.conf test is successful

4. Choisissez la méthode de livraison et les limites du lien. Lisez d’abord les valeurs actuelles de WooCommerce.

wp option get woocommerce_file_download_method
wp option get woocommerce_downloads_require_login
wp option get woocommerce_downloads_grant_access_after_payment
force
no
yes

Passez à la méthode du serveur web si votre hébergeur a X-Accel-Redirect ou mod_xsendfile activé, ce qui est le cas chez la plupart des hébergeurs infogérés.

wp option update woocommerce_file_download_method xsendfile
Success: Updated option 'woocommerce_file_download_method'.

WooCommerce fixe la limite de téléchargements et l’expiration par produit, dans la section Téléchargeable de l’éditeur de produit. Mettez la limite au nombre d’appareils qu’un acheteur utilise de façon plausible, plus deux, ce qui donne 5 pour un livre numérique. Mettez l’expiration en jours à la durée de votre fenêtre de remboursement plus 15, ce qui donne 30 jours pour une politique de 14 jours.

wp post meta update 412 _download_limit 5
wp post meta update 412 _download_expiry 30
Success: Updated custom field '_download_limit'.
Success: Updated custom field '_download_expiry'.

EDD applique les deux mêmes réglages globalement, et chaque téléchargement peut remplacer la limite.

wp eval 'echo edd_get_option( "download_link_expiration", 24 ) . PHP_EOL;'
wp eval 'echo edd_get_option( "file_download_limit", "unlimited" ) . PHP_EOL;'
24
unlimited

L’expiration d’EDD est en heures, pas en jours, donc 24 vaut une journée. Montez-la à 720 pour suivre la règle des 30 jours ci-dessus, et mettez la limite à 5 pour la même raison.

5. Réglez les licences et les mises à jour logicielles. Disons que vous vendez des extensions ou des thèmes WordPress. Les sites clients doivent alors recevoir vos mises à jour. Le module maison Software Licensing d’EDD émet les clés de licence, plafonne les activations par clé et fait tourner le point de mise à jour que ces sites appellent. Cette seule capacité est la meilleure raison de choisir EDD. Sur WooCommerce, vous assemblez la même chose à partir de modules tiers. Montez le point de mise à jour en préproduction et testez-le avec un vrai site client. Des clés qui fonctionnent pendant que les mises à jour échouent en silence, c’est la panne habituelle ici.

6. Décidez du fonctionnement des paiements récurrents. WooCommerce gère les abonnements avec son module payant Subscriptions. EDD les gère avec son module payant Recurring Payments. Les deux facturent selon un calendrier à travers la passerelle, et les deux ont besoin d’un planificateur qui fonctionne sur le serveur. Confirmez donc que le cron de WordPress se déclenche avant de vendre votre premier renouvellement.

wp cron event list --fields=hook,next_run_relative --format=table | head -n 5
+-------------------------------+-------------------+
| hook                          | next_run_relative |
+-------------------------------+-------------------+
| wp_version_check              | 3m 12s            |
| woocommerce_scheduled_sales   | 6h 41m            |
+-------------------------------+-------------------+

7. Configurez les taxes pour les endroits où vous vendez vraiment. Les biens numériques sont taxés là où se trouve l’acheteur, pas là où vous expédiez, puisque rien n’est expédié. Dans WooCommerce, cela tient à un réglage précis.

wp option get woocommerce_calc_taxes
wp option get woocommerce_tax_based_on
wp option get woocommerce_prices_include_tax
yes
billing
no

Mettez woocommerce_tax_based_on à billing. Pour le Canada, ajoutez une ligne de taux par province : TPS seule en Alberta, TVH en Ontario et dans l’Atlantique, TPS plus TVQ au Québec. La TVQ est la taxe de vente du Québec et, depuis 2013, elle se calcule sur le montant avant TPS, alors laissez la case composée décochée sur cette ligne. EDD reprend la même idée dans sa propre table de taux.

wp eval 'echo edd_use_taxes() ? "taxes on" : "taxes off", PHP_EOL;'
taxes on

Pour l’Union européenne, la taxe sur la valeur ajoutée (TVA) des biens numériques suit le pays de l’acheteur et demande deux preuves de l’endroit où il se trouve. Aucune des deux extensions ne valide les numéros de TVA d’entreprise toute seule, alors les deux ont besoin d’un module pour cela et pour la déclaration au guichet unique. Confirmez vos obligations d’inscription avec votre comptable. Revenu Québec et l’Agence du revenu du Canada ont tous deux des règles pour les fournisseurs situés hors de leur territoire qui vendent des biens numériques à des résidents.

8. Choisissez les passerelles et planifiez la sortie. Les deux extensions acceptent Stripe et PayPal, et le guide de dépannage de Stripe pour WooCommerce couvre les pannes des deux côtés. Vérifiez chaque intégration de passerelle pour les frais de plateforme ajoutés par-dessus le taux du processeur, parce que les connexions gratuites en portent parfois. Écrivez ensuite votre plan de migration tout de suite, pendant que la décision est fraîche. Les produits passent d’une extension à l’autre en fichier CSV, avec la méthode décrite dans importer des produits WooCommerce depuis un CSV. Les commandes historiques passent rarement proprement, alors le plan habituel est de les laisser en lecture seule dans l’ancien système pour la durée de conservation exigée par votre comptable.

Vérifier que ça fonctionne

Passez une commande en mode test de votre passerelle, puis confirmez tout le chemin, de la commande au fichier.

wp eval 'foreach ( wc_get_orders( array( "limit" => 1, "status" => "completed" ) ) as $o ) { foreach ( $o->get_downloadable_items() as $i ) { echo $i["download_url"], PHP_EOL; } }'
https://example.com/?download_file=412&order=wc_order_8Kd2&email=test%40example.com&key=9f2c

Demandez exactement cette adresse et lisez les en-têtes.

curl -sI "https://example.com/?download_file=412&order=wc_order_8Kd2&email=test%40example.com&key=9f2c" | head -n 3
HTTP/2 200
content-type: application/pdf
content-disposition: attachment; filename="sample.pdf"

Sur EDD, confirmez que la commande a bien atterri dans les nouvelles tables.

wp eval 'echo count( edd_get_orders( array( "number" => 1, "status" => "complete" ) ) ) . PHP_EOL;'
1

Mesurez ensuite les deux chiffres qui pilotent le coût d’hébergement. La bande passante de téléchargement vient du journal d’accès.

awk '/download_file=|eddfile=/ {b += $10} END {printf "%d MB\n", b / 1048576}' /var/log/nginx/access.log
4180 MB

La croissance des tables de commandes vient de la base de données.

wp db query "SELECT TABLE_NAME, TABLE_ROWS, ROUND((DATA_LENGTH+INDEX_LENGTH)/1048576) AS mb FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME REGEXP 'wc_order|edd_order' ORDER BY 3 DESC;"
wp_wc_orders            18422   41
wp_wc_order_stats       18422   12
wp_wc_order_addresses   18422    9

Notez les deux chiffres le jour du lancement. Ce sont les valeurs de référence à comparer quand la facture d’hébergement bouge.

Dépannage

Le lien de téléchargement affiche l’écran de connexion. woocommerce_downloads_require_login est à yes alors que l’acheteur a payé sans compte, donc il n’y a aucun compte où se connecter. Soit vous désactivez la commande sans compte, soit vous mettez ce réglage à no et vous vous fiez au jeton contenu dans le lien.

Les gros téléchargements s’arrêtent en chemin. Le téléchargement forcé diffuse le fichier à travers PHP, et le transfert meurt en atteignant max_execution_time ou la limite de mémoire. Passez woocommerce_file_download_method à xsendfile, ou déplacez les fichiers de plus de 200 Mo vers un stockage objet.

Des acheteurs signalent que le fichier circule hors de votre clientèle. Les limites de lien ne servent à rien si le dossier lui-même est lisible. Relancez la vérification curl -sI de l’étape 3 contre un vrai fichier payant. Sur nginx, un bloc location manquant en est la cause habituelle, car le fichier .htaccess écrit par les deux extensions est une instruction Apache seulement.

La taxe sort à zéro sur une commande numérique. woocommerce_tax_based_on est réglé sur shipping. Un produit virtuel ne recueille aucune adresse de livraison, donc il n’y a rien à comparer à un taux. Mettez-le à billing et passez une nouvelle commande de test.

Les rapports et l’écran des commandes rament. Vérifiez si HPOS est actif en cherchant wp_wc_orders dans la liste de tables de l’étape de vérification. Si la table manque, les commandes vivent encore dans wp_posts, et le correctif est la migration HPOS. Le guide des statuts de commande WooCommerce explique quels statuts vos rapports comptent.

Quand ce n’est pas la bonne approche

Si vous vendez un livre numérique quelques fois par mois, les deux extensions sont plus de machinerie qu’il n’en faut, et un lien de caisse hébergé chez votre fournisseur de paiement suffira. Si vous bâtissez une place de marché où d’autres vendent et se font payer, aucun des deux cœurs ne gère les versements. Ce travail de module devient le vrai projet. Si vous vendez des cours ou des adhésions plutôt que des fichiers, une extension d’apprentissage ou d’adhésion dédiée convient souvent mieux que l’une ou l’autre, et les deux peuvent cohabiter avec elle. Si le choix porte en fait sur la plateforme entière plutôt que sur l’extension, lisez d’abord WooCommerce ou Shopify. Pour les détails de référence, voyez la documentation WooCommerce sur les produits téléchargeables et la documentation d’Easy Digital Downloads.

Un WordPress qui rapporte vraiment mérite un opérateur — Stack Harbor opère cette pile sous WordPress Entreprise ; réservez une consultation d’infrastructure.