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 colissimo

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

woocommerce colissimo

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

cart colissimo afficher gratuit

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.

A lire aussi
CSS : glyphicon bootstrap de couleur transparente

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.

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.

3 Commentaires sur “Woocommerce colissimo : Manipuler woocommerce_after_shipping_rate pour afficher explicitement la livraison offerte avec le plugin Colissimo

  1. Stephanie says:

    je rencontre exactement la même problématique. Je voudrais que quand les frais d’expédition sont gratuits, la mention « gratuit » apparaisse. Comme sur votre exemple, si le coût est supérieur à zéro, la somme en apparente, par exemple » :8.00€ »
    je ne m’y connais pas en php et je n’arrive donc pas à m’en sortir.
    voici mon code source :
    /**
    * Filter formatted price.
    *
    * @param float $formatted_price Formatted price.
    * @param float $price Unformatted price.
    * @param int $decimals Number of decimals.
    * @param string $decimal_separator Decimal separator.
    * @param string $thousand_separator Thousand separator.
    * @param float|string $original_price Original price as float, or empty string. Since 5.0.0.
    */
    $price = apply_filters( ‘formatted_woocommerce_price’, number_format( $price, $args[‘decimals’], $args[‘decimal_separator’], $args[‘thousand_separator’] ), $price, $args[‘decimals’], $args[‘decimal_separator’], $args[‘thousand_separator’], $original_price );

    if ( apply_filters( ‘woocommerce_price_trim_zeros’, false ) && $args[‘decimals’] > 0 ) {
    $price = wc_trim_zeros( $price );

    }

    $formatted_price = ( $negative ? ‘-‘ :  » ) . sprintf( $args[‘price_format’],  » . get_woocommerce_currency_symbol( $args[‘currency’] ) .  », $price );
    $return =  » . $formatted_price .  »;

    if ( $args[‘ex_tax_label’] && wc_tax_enabled() ) {
    $return .= ‘ ‘ . WC()->countries->ex_tax_or_vat() .  »;
    }

    Vous croyez que vous pouvez m’aider ?
    merci

    • CTV says:

      Si vous avez une modification à faire, ce n’est pas dans le code de woocommerce mais dans votre fichier functions.php
      C’est attaché à un plugin votre modification ?

Laisser un commentaire