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 :
En revanche, quand le seuil de gratuité est passé, cela n’est pas affiché :
Cela ne convient évidemment pas. Il faudrait pouvoir afficher ce type d’information à l’écran :
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.
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.
happyfrog34
alors là, bravo et merci… c’est top ça marche nickel
Stephanie
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
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 ?