Le plugin officiel de La Poste, Colissimo shipping methods for WooCommerce, permet de gérer aisément les Colissimos d’une boutique woocommerce (étiquettes aller / retour et numéro de suivi).

il présente pourtant le défaut de ne pas afficher la mention « livraison gratuite » lorsque l’on a configuré les frais d’expédition en conséquence. C’est embêtant surtout avec une gratuité déclinée selon le contenu du panier et le choix d’expédition (envoi direct ou en point relais).

Pour la livraison payante, cela ne présente aucun problème puisque l’affichage du prix est clairement décrit :

Woocommerce : Manipuler woocommerce_after_shipping_rate pour afficher explicitement la livraison offerte avec le plugin Colissimo 1

En revanche, quand le seuil de gratuité est passé, cela n’est pas affiché :

Woocommerce : Manipuler woocommerce_after_shipping_rate pour afficher explicitement la livraison offerte avec le plugin Colissimo 2

Cela ne convient évidemment pas. Il faudrait pouvoir afficher ce type d’information à l’écran :

Woocommerce : Manipuler woocommerce_after_shipping_rate pour afficher explicitement la livraison offerte avec le plugin Colissimo 3

Comment afficher la mention « Livraison gratuite » quand c’est gratuit pour un mode de livraison avec mon plugin Colissimo shipping methods for WooCommerce

Le bloc d’affichage des modes de livraisons proposés dans le panier de woocommerce est géré dans le fichier themes/flatsome/woocommerce/cart/cart-shipping.php

<ul id="shipping_method" class="shipping__list woocommerce-shipping-methods">
   <?php foreach ( $available_methods as $method ) : ?>
	<li class="shipping__list_item">
	<?php
	if ( 1 < count( $available_methods ) ) {
 	   printf( '<input type="radio" name="shipping_method[%1$d]" data-index="%1$d" id="shipping_method_%1$d_%2$s" value="%3$s" class="shipping_method" %4$s />', $index, esc_attr( sanitize_title( $method->id ) ), esc_attr( $method->id ), checked( $method->id, $chosen_method, false ) ); // WPCS: XSS ok.
	} else {
	   printf( '<input type="hidden" name="shipping_method[%1$d]" data-index="%1$d" id="shipping_method_%1$d_%2$s" value="%3$s" class="shipping_method" />', $index, esc_attr( sanitize_title( $method->id ) ), esc_attr( $method->id ) ); // WPCS: XSS ok.
	}
	printf( '<label class="shipping__list_label" for="shipping_method_%1$s_%2$s">%3$s</label>', $index, esc_attr( sanitize_title( $method->id ) ), wc_cart_totals_shipping_method_label( $method ) ); // WPCS: XSS ok.
	do_action( 'woocommerce_after_shipping_rate', $method, $index );
   ?>
	</li>
   <?php endforeach; ?>
</ul>

Et ce qui nous intéresse est le woocommerce_after_shipping_rate du do_action( 'woocommerce_after_shipping_rate', $method, $index ); qu’on va aller trifouiller dans le fichier functions.php du thème enfant.

En regardant le code, on observe que le mode d’envoi et le tarif (le truc qui affiche, par exemple, soit Colissimo, soit Colissimo : 6,00 €) sont gérés par la méthode wc_cart_totals_shipping_method_label( $method ).

Ce qui discrimine l’affichage du prix ou de la gratuité est la présence des 2 points (‘ : ‘). Donc, nous allons afficher la mention « Livraison gratuite » quand ces deux points sont absents.

A lire aussi
Comment réduire la taille d'une photo ou image

Pour faire cela, ajoutez en fin de votre fichier functions.php ces lignes, sachant que lcp_nosign et lpc_relay correspondent aux valeurs des cases à cocher des types de livraison dans le plugin de la poste.

add_action( 'woocommerce_after_shipping_rate', 'livraison_offerte', 20, 2 );
function livraison_offerte( $method, $index )
{
    if( $method->get_id() == 'lpc_nosign' ){
		if (stristr(wc_cart_totals_shipping_method_label( $method ),':') === FALSE){
			echo "Livraison offerte";}
    }
	else if( $method->get_id() == 'lpc_relay' ){
		if (stristr(wc_cart_totals_shipping_method_label( $method ),':') === FALSE){
			echo "Livraison offerte";}
    }
}

Transférez vers votre serveur. Et ça marche.

N’hésitez pas à faire part de vos remarques et ou améliorations.

Un commentaire sur “Woocommerce : Manipuler woocommerce_after_shipping_rate pour afficher explicitement la livraison offerte avec le plugin Colissimo

Laisser un commentaire