Wie blende ich bei kostenlosem Versand alle Versandoptionen im Warenkorb aus (WooCommerce)?

Marc Wag­ner

August 8, 2023

3 min read|

Unter den Woo­­Com­­mer­ce-Ein­s­tel­­lun­­gen las­sen sich unter Ver­sand­zo­nen die gewünsch­ten Ver­sand­ar­ten fest­le­gen. Dabei kann man unter bestimm­ten Bedin­gun­gen auch die kos­ten­lo­se Lie­fe­rung anbie­ten – am häu­figs­ten hier der Min­dest­be­stell­wert.

Screenshot 2023 07 28 100720

Unschö­ner wei­se wird dies aller­dings im Waren­korb anschlie­ßend als aus­zu­wäh­len­de Ver­sand­op­ti­on ange­zeigt, anstatt die hier ange­ge­be­ne Pau­scha­le zu erset­zen. Das führt dazu, dass unwis­sen­de Kund­schaft dies even­tu­ell über­sieht und sich anschlie­ßend über zu Unrecht gezahl­te Ver­sand­kos­ten ärgert.

Screenshot 2023 06 07 103727

Lei­der gibt es im Word­­Press-Backend unter dem Rei­ter Woo­Com­mer­ce kei­ner­lei Ein­stel­lungs­mög­lich­keit für die­ses Pro­blem. Um es zu lösen, wird in der functions.php dei­ner Web­sei­te eine Funk­ti­on benö­tigt, die hier Abhil­fe schafft.

<?php

function my_hide_shipping_when_free_is_available( $rates ) {
	$free = array();

	foreach ( $rates as $rate_id => $rate ) {
		if ( 'free_shipping' === $rate->method_id ) {
			$free[ $rate_id ] = $rate;
			break;
		}
	}

	return ! empty( $free ) ? $free : $rates;
}

add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );

Wenn du die­ses Code-Snip­­pet in dei­ne functions.php ein­fügst, wird im Waren­korb nur noch „Kos­ten­lo­se Lie­fe­rung“ ange­wen­det, sobald die Bedin­gung für den kos­ten­lo­sen Ver­sand erfüllt wur­de. So musst du dir kei­ne Sor­gen machen, dass dei­ne Kun­den fälsch­li­cher­wei­se Ver­sand zah­len.


So ganz ist es damit aller­dings noch nicht getan, denn das Hin­zu­fü­gen die­ses Codes wirft ein neu­es Pro­blem auf:

Screenshot 2023 06 07 150610

Die ver­schie­de­nen Benut­zer­rol­len ver­ur­sa­chen hier, dass der kos­ten­lo­se Ver­sand nicht ange­zeigt wird. Da die kos­ten­lo­se Lie­fe­rung an der Ver­sand­zo­ne hängt, benö­tigt das Backend die Adres­se des Nut­zers, um die Ver­sand­zo­ne rich­tig zuord­nen zu kön­nen. Das bedeu­tet, dass Nut­zer mit Account und ein­ge­tra­ge­ner Lie­­fer- bzw. Rech­nungs­adres­se den Ver­sand kor­rekt ange­zeigt bekom­men. Als Gast Bestel­len­de sehen jedoch nichts, wie im obi­gen Bild zu sehen ist.

Dies ist glück­li­cher­wei­se leicht zu lösen, denn in den Ver­sand­op­tio­nen unter dem Rei­ter Woo­Com­mer­ce im Dash­board gibt es eine Ein­stel­lung, die genau dies beschreibt. Wenn die­se deak­ti­viert wird, wird der Ver­sand auch für Gäs­te rich­tig ange­zeigt. Die Logik mut­maßt die rich­ti­ge Ver­sand­zo­ne in die­sem Fall anhand der IP-Adres­­se des Nut­zers.

Screenshot 2023 07 28 101235
Screenshot 2023 07 28 104100

Ein Online-Shop mit kom­ple­xe­ren Anfor­de­run­gen bezüg­lich Rabat­ten und Ver­sand kommt lei­der nicht immer ohne zusätz­li­chen Code oder Plug­ins aus. Die hier auf­ge­zeig­te Lösung stellt sicher, dass kos­ten­lo­ser Ver­sand sich stets gegen­über ande­ren Mög­lich­kei­ten durch­setzt, wenn des­sen Bedin­gun­gen erfüllt sind.

Falls es für die Ver­sand­zo­ne z.B. Abho­lung vor Ort gibt, soll­te die­se natür­lich neben jeg­li­cher Art von Ver­sand­kos­ten als Aus­wahl­mög­lich­keit bestehen blei­ben. In die­sem Fall muss der oben genann­te Code etwas modi­fi­ziert wer­den:

function v161_woocommerce_hide_shipping_method( $rates ) {
$free = array();
$free_shipping = false;

    foreach ( $rates as $rate_id => $rate ) {

        if ( 'free_shipping' === $rate->method_id ) {

            $free[ $rate_id ] = $rate;
            $free_shipping = true;

        }

        if ( $free_shipping == true && 'my_custom_shipping_method' === $rate->method_id ) {
            $free[ $rate_id ] = $rate;
        }

    }

    return ! empty( $free ) ? $free : $rates;
}

„‘my_custom_shipping_option‘ === $rate->method_id“ beschreibt hier­bei die hier die gewünsch­te Ver­sand­op­ti­on, die nun zusätz­lich zum kos­ten­lo­sen Ver­sand wei­ter­hin ange­zeigt wird.

88e86fcb816eff22bc917094df2862d8dd5c0e978b333e6dd5f36f808990c261 96

Arti­kel von:

Marc Wag­ner

Hal­lo, Marc hier. Ich bin der Grün­der von Forge12 Inter­ac­ti­ve und bereits seit über 20 Jah­ren lei­den­schaft­lich dabei Web­sei­ten, Online­shops, Anwen­dun­gen und SaaS-Lösun­gen für Unter­neh­men zu ent­wi­ckeln. Vor der Grün­dung habe ich bereits in Bör­sen notier­ten Unter­neh­men gear­bei­tet und mir aller­lei Wis­sen ange­eig­net. Die­ses Wis­sen möch­te ich nun an mei­ne Kun­den wei­ter­ge­ben.

Hast du eine Fra­ge? Hin­ter­lass bit­te einen Kom­men­tar
  1. 68a5684265e85a123edd7f2a20635fbc3ef68c0adbede38e740c024f6633f955 54
    Nico­las Grimm Dezem­ber 28, 2023 at 13:51 — Rep­ly

    Sehr hilf­rei­cher Code-Schnip­­sel für einen Woo­Com­mer­ce Shop. Dan­ke.