vendredi 25 septembre 2026

À propos

Contact

Tips

Dix snippets WooCommerce qui règlent les demandes clients courantes

Texte du bouton panier, champs de commande, livraison gratuite ou redirection après ajout : dix correctifs WooCommerce prêts à copier dans functions.php.

Par Clément Hadrot • 15 juin 2023 • 5 min de lecture • Aucun commentaire
Dix snippets WooCommerce qui règlent les demandes clients courantes

Un client qui vend des bougies artisanales m’a un jour envoyé une liste de douze demandes après la mise en ligne de sa boutique WooCommerce : « le bouton devrait dire Je commande », « il faut un champ pour le numéro d’appartement », « la livraison gratuite doit s’afficher plus tôt »… Aucune de ces demandes ne justifiait une extension supplémentaire. Toutes se règlent avec un filtre ou une action, en quelques lignes.

Voici dix snippets que je réutilise régulièrement, glanés au fil des projets pour des boutiques de tailles très différentes. Chacun s’ajoute dans le functions.php du thème enfant ou, mieux, dans une extension maison dédiée aux personnalisations métier.

Renommer le texte des boutons

Le filtre woocommerce_product_single_add_to_cart_text change le texte du bouton sur la fiche produit, et woocommerce_product_add_to_cart_text fait de même sur les pages d’archive.

add_filter( 'woocommerce_product_single_add_to_cart_text', function () {
    return __( 'Je commande', 'mon-theme' );
} );

Pour un texte différent selon le type de produit (variable, externe), on peut tester $product->is_type() dans le même filtre avant de retourner la chaîne.

Ajouter un champ à la commande

Le trio woocommerce_after_order_notes, woocommerce_checkout_process et woocommerce_checkout_update_order_meta permet d’ajouter, valider puis enregistrer un champ personnalisé, par exemple un numéro d’appartement ou un créneau de livraison.

L'essentiel à retenir : Dix hooks WooCommerce prêts à l'emploi ; Filtres plutôt que surcharge de templates ; Compatibles avec la plupart des thèmes enfants
add_action( 'woocommerce_after_order_notes', function ( $checkout ) {
    woocommerce_form_field( 'creneau_livraison', [
        'type'        => 'select',
        'label'       => __( 'Créneau de livraison', 'mon-theme' ),
        'options'     => [
            'matin'    => __( 'Matin (8h-12h)', 'mon-theme' ),
            'apres_midi' => __( 'Après-midi (14h-18h)', 'mon-theme' ),
        ],
        'required'    => true,
    ], $checkout->get_value( 'creneau_livraison' ) );
} );

add_action( 'woocommerce_checkout_process', function () {
    if ( empty( $_POST['creneau_livraison'] ) ) {
        wc_add_notice( __( 'Merci de choisir un créneau de livraison.', 'mon-theme' ), 'error' );
    }
} );

add_action( 'woocommerce_checkout_update_order_meta', function ( $order_id ) {
    if ( ! empty( $_POST['creneau_livraison'] ) ) {
        update_post_meta( $order_id, '_creneau_livraison', sanitize_text_field( $_POST['creneau_livraison'] ) );
    }
} );

Afficher la livraison gratuite plus tôt

Sur une boutique qui offrait la livraison au-delà de 60 €, le client voulait un message dès que le panier atteignait 40 €, pour inciter à l’achat complémentaire. Le hook woocommerce_before_cart associé à WC()->cart->get_cart_contents_total() suffit :

add_action( 'woocommerce_before_cart', function () {
    $seuil = 60;
    $total = WC()->cart->get_cart_contents_total();
    $reste = $seuil - $total;
    if ( $reste > 0 ) {
        echo '<p class="notice-livraison">';
        printf( __( 'Plus que %s pour la livraison offerte !', 'mon-theme' ), wc_price( $reste ) );
        echo '</p>';
    }
} );

Rediriger après l’ajout au panier

Certains clients veulent envoyer l’acheteur directement vers le panier plutôt que rester sur la fiche produit. Un simple filtre sur l’URL de redirection règle le cas :

  • add_filter( 'woocommerce_add_to_cart_redirect', 'wc_get_cart_url' ) pour rediriger systématiquement vers le panier.
  • Utile aussi pour rediriger vers une page de vente incitative, en retournant une URL personnalisée.

Masquer un moyen de paiement selon la zone

Pour un client qui ne voulait proposer le paiement à la livraison qu’en France métropolitaine, le filtre woocommerce_available_payment_gateways a permis de retirer la passerelle sans toucher aux réglages globaux :

add_filter( 'woocommerce_available_payment_gateways', function ( $gateways ) {
    if ( isset( $gateways['cod'] ) && WC()->customer->get_shipping_country() !== 'FR' ) {
        unset( $gateways['cod'] );
    }
    return $gateways;
} );

Autres demandes fréquentes

  • Masquer le prix et remplacer le bouton d’ajout par « Sur devis » via woocommerce_get_price_html.
  • Modifier le nombre d’articles par page dans le catalogue avec loop_shop_per_page.
  • Ajouter une note automatique à chaque commande grâce à woocommerce_checkout_update_order_meta.
  • Changer l’ordre des onglets produit via le filtre woocommerce_product_tabs.

Avant d’écrire un snippet, je vérifie toujours qu’il n’existe pas déjà un réglage natif dans WooCommerce : la moitié des demandes se règlent dans les paramètres, sans une ligne de code.

Bonnes pratiques pour ranger ces snippets

Regrouper ces personnalisations dans une extension maison plutôt que dans le thème évite de les perdre lors d’un changement de thème graphique. Je découpe généralement le fichier par domaine : class-checkout-fields.php, class-shipping-messages.php, etc., chargés depuis un fichier principal.

SnippetHook principalRisque si mal fait
Champ de commandewoocommerce_checkout_update_order_metaDonnée perdue si non enregistrée
Livraison gratuitewoocommerce_before_cartMessage qui ne se met pas à jour en AJAX
Masquer un paiementwoocommerce_available_payment_gatewaysBlocage total si mal filtré

Notre verdict

Ces dix snippets couvrent l’essentiel des demandes reçues sur des boutiques de taille modeste à moyenne. Ils ont un avantage sur les extensions dédiées : ils ne chargent aucun script ou style supplémentaire, et restent lisibles pour la personne qui reprendra le projet dans deux ans. La seule discipline à tenir, c’est de documenter chaque filtre avec un commentaire expliquant la demande d’origine du client.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi