{"id":11563,"date":"2018-04-04T17:49:17","date_gmt":"2018-04-04T15:49:17","guid":{"rendered":"https:\/\/www.saasweb.agency\/blog\/wordpress-et-woocommerce-le-duo-parfait\/"},"modified":"2026-10-27T18:03:11","modified_gmt":"2026-10-27T17:03:11","slug":"wordpress-et-woocommerce-le-duo-parfait","status":"publish","type":"post","link":"https:\/\/www.saasweb.agency\/fr\/blog\/wordpress-et-woocommerce-le-duo-parfait\/","title":{"rendered":"WordPress et WooCommerce \u2013 le duo parfait"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">WordPress est, comme chacun sait, <a href=\"https:\/\/w3techs.com\/technologies\/overview\/content_management\/all\" target=\"_blank\" rel=\"noopener\">le CMS num\u00e9ro un au monde<\/a>, ce n\u2019est plus une nouveaut\u00e9. Ce qui l\u2019est moins en revanche, c\u2019est que WordPress est \u00e9galement le num\u00e9ro un des boutiques en ligne gr\u00e2ce \u00e0 <a href=\"https:\/\/woocommerce.com\/\" target=\"_blank\" rel=\"noopener\">WooCommerce<\/a>. <\/p>\n\n<p class=\"wp-block-paragraph\">WooCommerce fait \u00e9galement partie d\u2019<a href=\"https:\/\/automattic.com\/\" target=\"_blank\" rel=\"noopener\">Automattic<\/a> depuis 2015, ce qui garantit la p\u00e9rennit\u00e9 de la compatibilit\u00e9 et du d\u00e9veloppement de l\u2019extension.<\/p>\n\n<p class=\"wp-block-paragraph\">Apr\u00e8s l\u2019installation et l\u2019activation de WooCommerce, de nouveaux types de contenus personnalis\u00e9s (Custom Post Types), taxonomies personnalis\u00e9es (Custom Taxonomy) et pages sp\u00e9ciales sont cr\u00e9\u00e9s. Le type de contenu personnalis\u00e9, tu l\u2019auras devin\u00e9, repr\u00e9sente un produit dans WordPress, tandis que la taxonomie personnalis\u00e9e sert \u00e0 d\u00e9finir la cat\u00e9gorie et le mot-cl\u00e9 du produit. Les pages sp\u00e9ciales sont la page boutique (par d\u00e9faut <code>\/shop<\/code>) sur laquelle tous les produits sont affich\u00e9s, la page des CGV (<code>\/terms-conditions<\/code>), l\u2019espace client (<code>\/my-account<\/code>) permettant aux clients de suivre leurs commandes en cours, le panier (<code>\/cart<\/code>) et la page de commande (<code>\/checkout<\/code>).  <\/p>\n\n<p class=\"wp-block-paragraph\">Voici les fonctionnalit\u00e9s propos\u00e9es par WooCommerce :<\/p>\n\n<ul class=\"wp-block-list\">\n<li>Produits\n<ul class=\"wp-block-list\">\n<li>Types de produits : produit simple, produit variable, article \u00ab immat\u00e9riel \u00bb, lien vers un autre produit. Un produit variable est par exemple un produit disponible en plusieurs tailles ou couleurs. Les diff\u00e9rentes variantes peuvent \u00eatre cr\u00e9\u00e9es \u00e0 l\u2019aide d\u2019<em>attributs<\/em> d\u00e9finissables librement. Les produits immat\u00e9riels sont par exemple des t\u00e9l\u00e9chargements PDF ou des codes \u00e0 t\u00e9l\u00e9charger.   <\/li>\n\n\n\n<li>Pr\u00e9sentation du produit : pour chaque produit, il est possible de renseigner un nom, une description courte et une description d\u00e9taill\u00e9e. On y ajoute \u00e9galement une grande image produit ainsi que des images suppl\u00e9mentaires (galerie). Bien entendu, un prix est aussi indiqu\u00e9.  <\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Devise, prix : il est possible de d\u00e9finir aussi bien la devise que l\u2019affichage des prix avec ou sans TVA. Il est \u00e9galement possible d\u2019indiquer diff\u00e9rents taux de TVA en fonction du pays d\u2019origine de la commande. <\/li>\n\n\n\n<li>Gestion des stocks : une <em>gestion des stocks<\/em> simple peut \u00eatre activ\u00e9e. La quantit\u00e9 est saisie manuellement, puis le stock est automatiquement ajust\u00e9 en fonction des commandes. Pour les produits variables, la quantit\u00e9 en stock peut \u00eatre indiqu\u00e9e pour chaque variante. Il est \u00e9galement possible de d\u00e9finir si un produit passe automatiquement en <em>indisponible<\/em> lorsque le stock atteint 0, ou si les \u00ab commandes exc\u00e9dentaires \u00bb sont autoris\u00e9es et en quelle quantit\u00e9.   <\/li>\n\n\n\n<li>Livraison : des zones de livraison sont d\u00e9finies. Une zone de livraison peut s\u2019appliquer \u00e0 un ou plusieurs pays, et une ou plusieurs m\u00e9thodes de livraison y sont associ\u00e9es, comme les <em>frais de port forfaitaires<\/em> ou la <em>livraison gratuite<\/em>. <\/li>\n\n\n\n<li>Options de paiement : une int\u00e9gration PayPal peut \u00eatre activ\u00e9e par d\u00e9faut ; sinon, les options suivantes sont disponibles : <em>virement bancaire<\/em>, <em>paiement \u00e0 la livraison<\/em> et <em>ch\u00e8que<\/em>. Il est \u00e9galement possible d\u2019activer des <em>bons de r\u00e9duction<\/em> et de les appliquer aux commandes. <\/li>\n\n\n\n<li>Compte client : il est possible d\u2019activer la fonction de compte pour les clients, leur offrant ainsi un espace o\u00f9 ils peuvent consulter leurs commandes en cours et pass\u00e9es.<\/li>\n\n\n\n<li>E-mails : diff\u00e9rents mod\u00e8les d\u2019e-mails sont disponibles pour diff\u00e9rentes actions (confirmation de commande, annulation, etc.).<\/li>\n\n\n\n<li>API : un \u00e9l\u00e9ment essentiel pour les d\u00e9veloppeurs ! L\u2019<em>API WooCommerce<\/em> permet d\u2019acc\u00e9der \u00e0 toutes les fonctionnalit\u00e9s et de les traiter via REST. <\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\">Bien s\u00fbr, ce ne sont pas l\u00e0 toutes les fonctionnalit\u00e9s, mais les plus importantes (celles qui me viennent \u00e0 l\u2019esprit en r\u00e9digeant cet article).<\/p>\n\n<p class=\"wp-block-paragraph\">Avec WPML, tu peux adapter ta boutique WooCommerce \u00e0 plusieurs langues. Tu peux traduire les produits comme des pages ou des articles classiques, ainsi que leurs attributs et taxonomies associ\u00e9s. Pour cela, il est recommand\u00e9 d\u2019installer et d\u2019activer l\u2019extension <em>WooCommerce Multilingual<\/em>.  <\/p>\n\n<h3 class=\"wp-block-heading\">Quantit\u00e9s en stock diff\u00e9rentes selon la langue<\/h3>\n\n<p class=\"wp-block-paragraph\">Si tu as des quantit\u00e9s en stock diff\u00e9rentes selon la langue, tu rencontres d\u2019abord un probl\u00e8me.<\/p>\n\n<p class=\"wp-block-paragraph\">La quantit\u00e9 ne peut \u00eatre g\u00e9r\u00e9e que de mani\u00e8re centralis\u00e9e via le produit dans la langue par d\u00e9faut. Cela signifie que le produit traduit a la m\u00eame quantit\u00e9 que celui de la langue par d\u00e9faut. <\/p>\n\n<p class=\"wp-block-paragraph\">Une option consiste \u00e0 cr\u00e9er le produit en tant que produit variable et \u00e0 d\u00e9finir des variantes linguistiques (pour les produits variables, la quantit\u00e9 en stock peut \u00eatre d\u00e9finie pour chaque variante). Ce n\u2019est toutefois pas aussi simple que cela : les widgets fournis par WooCommerce, comme les produits les mieux not\u00e9s par exemple, ne peuvent pas g\u00e9rer les variantes ; ils utilisent la quantit\u00e9 en stock de la variante d\u00e9finie par d\u00e9faut pour afficher le lien <em>Ajouter au panier<\/em> ou se contentent de cr\u00e9er un lien vers le produit. <\/p>\n\n<p class=\"wp-block-paragraph\">Par ailleurs, on souhaite probablement (c\u2019\u00e9tait notre cas) que la variante linguistique de la langue actuelle soit pr\u00e9s\u00e9lectionn\u00e9e. Cela n\u2019est pas non plus possible via l\u2019option permettant de d\u00e9finir un attribut par d\u00e9faut, car celle-ci s\u2019appliquerait alors \u00e0 toutes les langues. <\/p>\n\n<p class=\"wp-block-paragraph\">Tu peux voir le r\u00e9sultat ici, sur la page boutique : <a href=\"https:\/\/www.textilbox.de\" target=\"_blank\" rel=\"noopener\">www.textilbox.de<\/a>, <a href=\"https:\/\/www.textilbox.es\" target=\"_blank\" rel=\"noopener\">www.textilbox.es<\/a> et <a href=\"https:\/\/www.textilbox.fr\" target=\"_blank\" rel=\"noopener\">www.textilbox.fr<\/a>.<\/p>\n\n<p class=\"wp-block-paragraph\">Les filtres pr\u00e9sent\u00e9s ci-dessous sont tous rattach\u00e9s \u00e0 une action init et doivent \u00eatre d\u00e9finis dans le <code>functions.php<\/code> :<\/p>\n\n<pre class=\"wp-block-preformatted\">add_action('init', function() {\n\n  add_filter('function-name', function($args){\n .. Code ...\n },1,1); \n\n}<\/pre>\n\n<p class=\"wp-block-paragraph\">Pour que cela fonctionne comme indiqu\u00e9 dans le code ci-dessous, tu dois nommer les variantes linguistiques avec les m\u00eames codes ISO que ceux utilis\u00e9s par WPML. Nous avons 3 variantes linguistiques : allemand, fran\u00e7ais et espagnol, nomm\u00e9es respectivement de, fr et es.  <\/p>\n\n<p class=\"wp-block-paragraph\">Nous avons par ailleurs cr\u00e9\u00e9 l\u2019attribut <em>Language<\/em>, qui est utilis\u00e9 pour cr\u00e9er les variantes.<\/p>\n\n<pre class=\"wp-block-preformatted\">add_filter('woocommerce_product_add_to_cart_url', function($url, $product){\n if (is_a($product, 'WC_Product_Variable')) {\n $variations = $product-&gt;get_available_variations();\n $default_var = ICL_LANGUAGE_CODE . \"-\" . ICL_LANGUAGE_CODE;  \n  if ($default_var) {\n  foreach ($variations as $variation) {\n  if (\n  count($variation['attributes']) == 1 &amp;&amp;  \n  isset($variation['attributes']['attribute_pa_language']) &amp;&amp;  \n  $variation['attributes']['attribute_pa_language'] == $default_var &amp;&amp;  \n  $variation['variation_is_active'] &amp;&amp;\n  $variation['variation_is_visible'] &amp;&amp;\n  $variation['is_purchasable'] ) {\n  $url = remove_query_arg( 'added-to-cart', add_query_arg( array( 'variation_id' =&gt; $variation['variation_id'], 'add-to-cart' =&gt; $product-&gt;get_id() ), $product-&gt;get_permalink() ) );\n  return $url;\n  }\n  }\n  }\n  }\n  return $url;\n}, 99, 2);<\/pre>\n\n<p class=\"wp-block-paragraph\">Cette valeur <code>$default_var = ICL_LANGUAGE_CODE . \"-\" . ICL_LANGUAGE_CODE;<\/code> est d\u00e9finie afin que la variante linguistique de la langue actuelle soit s\u00e9lectionn\u00e9e lors du clic sur Ajouter au panier. Si un acheteur souhaite une autre variante linguistique, il doit d\u2019abord s\u00e9lectionner le produit, puis choisir la variante souhait\u00e9e. <\/p>\n\n<p class=\"wp-block-paragraph\">Il est \u00e9galement possible d\u2019utiliser cette fonction comme alternative \u00e0 la constante <code>ICL_LANGUAGE_CODE<\/code> :<br \/><code>global $sitepress;<br \/>$my_current_lang = $sitepress-&gt;get_current_language();<\/code><\/p>\n\n<pre class=\"wp-block-preformatted\">add_filter('woocommerce_product_add_to_cart_text', function($text, $product){\n if (is_a($product, 'WC_Product_Variable')) {\n $text = $product-&gt;is_purchasable() &amp;&amp; $product-&gt;is_in_stock() ? __( 'Add to cart', 'woocommerce' ) : __( 'Read more', 'woocommerce' );\n }\n return $text;\n}, 99, 2); <\/pre>\n\n<pre class=\"wp-block-preformatted\">add_filter( 'woocommerce_dropdown_variation_attribute_options_args', function($args){\n $attribute = $args['attribute'];\n if (empty($args['selected']) &amp;&amp; $attribute == 'pa_language') {\n $args['selected'] = ICL_LANGUAGE_CODE . \"-\" . ICL_LANGUAGE_CODE;\n }\n return $args;\n}, 10, 1 );  <\/pre>\n\n<h3 class=\"wp-block-heading\">Que se passe-t-il avec le panier lorsque le client change de langue ?<\/h3>\n\n<p class=\"wp-block-paragraph\">Voil\u00e0 une question int\u00e9ressante. Il existe diff\u00e9rentes possibilit\u00e9s : <\/p>\n\n<ul class=\"wp-block-list\">\n<li>Si tu as configur\u00e9 tes langues de mani\u00e8re \u00e0 ce que ton site les r\u00e9partisse ainsi <em>website.tld\/de<\/em>, <em>website.tld\/fr<\/em>, alors c\u2019est le cas le plus simple. Le panier est simplement traduit (le produit reste identique). <\/li>\n\n\n\n<li>Si tu as configur\u00e9 un domaine distinct par langue (<em>website.de<\/em>, <em>website.fr<\/em>), la situation devient un peu plus complexe. En effet, la session et les cookies sont toujours li\u00e9s \u00e0 un domaine donn\u00e9 ; lors d\u2019un changement de domaine, une nouvelle session et un nouveau cookie sont cr\u00e9\u00e9s. Il faut donc configurer WPML pour que les informations n\u00e9cessaires soient transmises soit par <code>GET<\/code>, soit par <code>POST<\/code> (les donn\u00e9es sont chiffr\u00e9es).  <\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\">Tu trouveras ici une documentation d\u00e9taill\u00e9e sur le sujet : <a href=\"https:\/\/wpml.org\/documentation\/getting-started-guide\/language-setup\/passing-session-data-between-languages-in-domains\/\" target=\"_blank\" rel=\"noopener\">https:\/\/wpml.org\/documentation\/getting-started-guide\/language-setup\/passing-session-data-between-languages-in-domains\/<\/a><\/p>\n\n<p class=\"wp-block-paragraph\">En Allemagne, on sait qu\u2019une mise en demeure peut rapidement arriver si l\u2019on ne respecte pas les r\u00e8gles. Cependant, il ne faut pas se conformer \u00e0 certaines r\u00e8gles uniquement par crainte de sanctions : certaines d\u2019entre elles sont tout \u00e0 fait pertinentes, comme l\u2019indication du prix au poids ou \u00e0 la mesure. Cela permet, pour les produits propos\u00e9s en diff\u00e9rentes tailles, de voir rapidement si et comment une \u00e9ventuelle remise s\u2019applique.  <\/p>\n\n<h3 class=\"wp-block-heading\">Aper\u00e7u des fonctionnalit\u00e9s de WooCommerce Germanized<\/h3>\n\n<p class=\"wp-block-paragraph\">L\u2019extension est propos\u00e9e en freemium : il existe une version gratuite qui offre d\u00e9j\u00e0 de nombreuses fonctionnalit\u00e9s, et <a href=\"https:\/\/vendidero.de\/woocommerce-germanized\" target=\"_blank\" rel=\"noopener\">une version payante Pro<\/a>, qui propose davantage de fonctionnalit\u00e9s. Dans cet article, nous nous int\u00e9ressons uniquement \u00e0 la version gratuite. <\/p>\n\n<p class=\"wp-block-paragraph\">Les fonctionnalit\u00e9s :<\/p>\n\n<ul class=\"wp-block-list\">\n<li>Correspondance avec les pages juridiquement pertinentes telles que les mentions l\u00e9gales, la politique de confidentialit\u00e9 ou le droit de r\u00e9tractation<\/li>\n\n\n\n<li>Formulaire de r\u00e9tractation sous forme de shortcode avec confirmation par e-mail<\/li>\n\n\n\n<li>Activation de l\u2019affichage d\u2019un prix de base, particuli\u00e8rement important pour les produits variables<\/li>\n\n\n\n<li>Affichage de la TVA et des frais de livraison en compl\u00e9ment du prix sur la page de pr\u00e9sentation et la page produit<\/li>\n\n\n\n<li>Activation du r\u00e9gime applicable aux petites entreprises<\/li>\n\n\n\n<li>Indication des d\u00e9lais de livraison<\/li>\n\n\n\n<li>Activation d\u2019une case \u00e0 cocher dans le processus de commande permettant aux clients d\u2019accepter la cr\u00e9ation d\u2019un compte client<\/li>\n\n\n\n<li>Proc\u00e9dure de double opt-in pour la cr\u00e9ation du compte client<\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\">Ici aussi, toutes les fonctionnalit\u00e9s ne sont pas list\u00e9es, il y en a trop \ud83d\ude09<\/p>\n\n<p class=\"wp-block-paragraph\">Tu peux d\u00e9couvrir une boutique utilisant WooCommerce Germanized ici : <a href=\"https:\/\/www.oelmanufaktur-bender.de\" target=\"_blank\" rel=\"noopener\">www.oelmanufaktur-bender.de<\/a>.<\/p>\n\n<p class=\"wp-block-paragraph\">Gr\u00e2ce \u00e0 la combinaison WordPress + WooCommerce, tu profites d\u2019un choix parmi des milliers d\u2019extensions. De nombreuses personnalisations peuvent par ailleurs \u00eatre r\u00e9alis\u00e9es sans toucher directement au code du CMS ou de WooCommerce, ce qui garantit la capacit\u00e9 du syst\u00e8me \u00e0 \u00eatre mis \u00e0 jour. Dans les exemples mentionn\u00e9s ci-dessus, les personnalisations sont r\u00e9alis\u00e9es via des <em>hooks<\/em>, des <em>actions<\/em> et des <em>filtres<\/em> ; WooCommerce lui-m\u00eame n\u2019a pas \u00e9t\u00e9 modifi\u00e9.  <\/p>\n\n<p class=\"wp-block-paragraph\">Des prestataires professionnels, qui se concentraient jusqu\u2019\u00e0 pr\u00e9sent sur les solutions de boutique traditionnelles telles que Magento, OXID ou Prestashop, d\u00e9veloppent de plus en plus leurs solutions pour WooCommerce.<\/p>\n\n<p class=\"wp-block-paragraph\">Un autre aspect que personne ne devrait n\u00e9gliger est celui des co\u00fbts de d\u00e9veloppement. Plus un syst\u00e8me est r\u00e9pandu, plus les co\u00fbts de d\u00e9veloppement sont avantageux, car de nombreux prestataires se font concurrence, ce qui tire les prix vers le bas. Cependant, la qualit\u00e9 a, comme on le sait, toujours un prix\u2026  <\/p>\n\n<p class=\"blog-angebot wp-block-paragraph\"><strong>Tu envisages de cr\u00e9er une boutique en ligne ?<\/strong> Nous concevons et assurons la maintenance de boutiques avec WordPress et WooCommerce. <a href=\"https:\/\/www.saasweb.agency\/fr\/logiciel\/technologies-frameworks\/wordpress\/boutiques-wordpress\/\">En savoir plus sur les boutiques WordPress<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>WordPress est, comme chacun sait, le CMS num\u00e9ro un au monde, ce n\u2019est plus une nouveaut\u00e9. Ce qui l\u2019est moins en revanche, c\u2019est que WordPress est \u00e9galement le num\u00e9ro un des boutiques en ligne gr\u00e2ce \u00e0 WooCommerce. WooCommerce fait \u00e9galement partie d\u2019Automattic depuis 2015, ce qui garantit la p\u00e9rennit\u00e9 de la compatibilit\u00e9 et du d\u00e9veloppement \u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[812,924,816],"tags":[1767,1981,1845,2234,1642,1015,1950,1843,1647,901,1434],"class_list":["post-11563","post","type-post","status-publish","format-standard","hentry","category-infos-saas-web","category-programmation","category-tutoriel","tag-accroche","tag-action","tag-filtre","tag-fonction","tag-fr","tag-functions-php","tag-panier","tag-woocommerce","tag-woocommerce-germanise","tag-wordpress","tag-wpml"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/posts\/11563","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/comments?post=11563"}],"version-history":[{"count":3,"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/posts\/11563\/revisions"}],"predecessor-version":[{"id":11937,"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/posts\/11563\/revisions\/11937"}],"wp:attachment":[{"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/media?parent=11563"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/categories?post=11563"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/tags?post=11563"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}