WooCommerce: Versand nur ab einem Mindestbestellwert

  • Liebe Forumsteilnehmer,

    für unseren Shop http://schwarze-kuh.farm/bestellen/shop/ möchte ich gerne die Funktion einrichte, dass der Versand erst ab einem Mindestbestellwert von 50 € als Versandoption verfügbar wird. Die Optionen "Abholung vor Ort" und "Versandkostenfreie Lieferung" ab einem Bestellwert von 150 € sollen davon unberührt bleiben. Schön wäre auch eine Benachrichtigung auf der Warenkorb und Kassen Seite, die den Kunden informiert, dass der Versand erst ab diesem Mindestbestellwert verfügbar ist.

    Bisher habe ich für alle Varianten einen Mindestbestellwert von 50 € eingerichtet, und zwar nach der Methode die auf der Seite https://www.sitepoint.com/minimum-checko…in-woocommerce/ beschrieben wird.

    Der angepasste Code in der functions.php des Child-Themes sieht wie folgt aus:

    Bei der Suche im Forum bin ich auf den Post

    mensmaximus
    20. September 2015 um 10:32

    von mensmaximum gestoßen, in dem beschrieben wird, wie bestimmte Zahlungsmethoden erst ab einem Mindestsbestellwert verfügbar werden. Ich denke das ist schon der richtige Ansatz, leider reichen meine PHP-Kenntnisse und mein Wissen um die WooCommerce Variablen und Methoden nicht aus um den Code an meine Bedürfnisse anzupassen. Die Code sieht wie folgt aus:

    PHP
    add_filter( 'woocommerce_available_payment_gateways', 'mmx_remove_cheque', 1 );
     function mmx_remove_cheque( $gateways ){    
        global $woocommerce;    
        if ( $woocommerce->cart->subtotal < 20 ) {        
          unset($gateways['cheque']);    
        }    
      return $gateways;
    }

    Ich wäre sehr dankbar dafür, wenn mir jemand ein ähnliches Problem schon lösen konnte und mir die Lösung mitteilen kann.

    Viele Grüße
    Rasmus

    Seite: http://schwarze-kuh.farm/bestellen/shop/
    Wordpressversion: WordPress 4.6.1
    Theme: Edge 1.1.1.0
    Plugins: WooCommerce 2.6.4
    WooCommerce Germanized 1.7.1

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Wenn man das direkt in den verfügbaren Versandmethoden durchführen will, muss das seit WooCommerce 2.6 mit dem Filter "woocommerce_package_rates" passieren.

    Ansatz (weder getestet noch geprüft):

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Super, funktioniert. Vielen Dank.

    Der Vollständigkeit halber und zur Dokumentation poste ich hier noch die Modifikationen für meinen spezifischen Anwendungsfall. Kann sein, dass das der Code für die Benachrichtigung überflüssig bzw. schlecht implementiert ist. Ich bin da für Änderungsvorschläge und Kritik offen.

  • Super vielen Dank fuer den KLEINEN Workaround!

    Aber diese Anpassung, stopp/verhindert nicht die Bestellung - Richtig?!?

    Habe es eingebaut und die Meldung funktioniert, aber ich kann dennoch die Bestellung weiter fuehren/abschliessen.

    Oder habe ich irgend etwas uebersehen?

    Wenn nicht - wie kann man diese Anpassung so machen, dass der Kunde erst weiter kommt, wenn der Bestellwert hoeher als der Mindestbestellwert liegt?

    Vielen Dank fuers lesen und antworten!

    G, Mike

  • Ich habe etwas aufgestoebert... ;)

    http://www.edv-mediaservice.de/2016/06/02/min…rt-ohne-plugin/

    Die machen das so:
    (... wie fuegt man hier einen Code-Block noch einmal ein?)


    add_action('the_post','minimum_order_func',10);

    function minimum_order_func(){
    global $woocommerce;
    if (is_checkout()){
    $minorder = 50;
    if( $woocommerce->cart->subtotal != 0)
    if( $woocommerce->cart->subtotal < $minorder){
    wc_add_notice( sprintf(__('Sie haben den Mindestbestellwert ' . $minorder . ' Euro noch nicht erreicht ! ', 'woocommerce'), home_url()) );
    wp_redirect( get_permalink( woocommerce_get_page_id( 'cart' ) ) );
    exit;
    }
    }
    }


    Ergebnis: Der Kunde wird nicht weiter gelassen, bis der Mindestbestellwert ueberschritten ist! ;)

    ###############

    Zum Schluss - Aber mal im ernst, eigentlich schon SemiKlasse - das man das NICHT ueber das Woocommerce-Backend (ohne Zusatz-Plugin) erledigen kann!

    Einmal editiert, zuletzt von mikeSo (24. November 2016 um 17:47)


  • JA und wenn Ihr eine (echte, rote) Fehlermeldung bekommen moechtet, dann schreibt folgendes:
    STATT:
    wc_add_notice( sprintf(__('Sie haben den Mindestbestellwert ' . $minorder . ' Euro noch nicht erreicht ! ', 'woocommerce'), home_url()) );

    DIES HIER:
    wc_add_notice( sprintf(__('Sie haben den Mindestbestellwert ' . $minorder . ' Euro noch nicht erreicht ! ', 'woocommerce'), home_url()) ,'error' );


    HIER KOMPLETT:
    add_action('the_post','minimum_order_func',10);

    function minimum_order_func(){
    global $woocommerce;
    if (is_checkout()){
    $minorder = 50;
    if( $woocommerce->cart->subtotal != 0)
    if( $woocommerce->cart->subtotal < $minorder){
    wc_add_notice( sprintf(__('Sie haben den Mindestbestellwert ' . $minorder . ' Euro noch nicht erreicht ! ', 'woocommerce'), home_url()) ,'error' );
    wp_redirect( get_permalink( woocommerce_get_page_id( 'cart' ) ) );
    exit;
    }
    }
    }


    ... ;)

  • Hallo mikeSo,

    ja, die bisherige Modifikation gibt dem Kunden nur eine Benachrichtigung aus, dass der Mindestbestellwert für eine Lieferung noch nicht erreicht ist. Allerdings bieten wir ja auch die Option der Abholung vor Ort an, und für die ist der Mindestbestellwert irrelevant.
    Die Modifikation von mensmaximus entfernt daher die Option "Lieferung" wenn der Mindestbestellwert nicht erreicht ist, lässt aber dem Kunden die Möglichkeit zur Abholung vor Ort weiter offen.

    VG Rasmus

  • Hallo mensmaximus,

    nochmal vielen Dank für die Lösung, sie funktioniert bisher sehr gut. Ich habe leider das Problem, dass bei einigen Kunden der Fehler

    Code
    SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

    auf der Checkoutsite mit der Angabe der Rechnungsadresse auftritt (siehe Screenshot), und es dann nicht möglich ist zum nächsten Bestellschritt zu kommen. Ein komplettes Neuladen der Seite vom Server, oder die Verwendung eines anderen Browsers, behebt diesen Fehler meist.
    Ich habe dem ein wenig nachrecherchiert und habe bisher nur gefunden, dass das an der Reihenfolge in der die Filter/Funktionen aufgerufen werden liegen kann.
    Muss ich demnach die 100 im Filter verändern? Und muss diese erhöht oder verringert werden?
    Ich hoffe die Frage ist jetzt nicht allzu blöd. Ich muss mal wirklich anfangen mich intensiver mit PHP zu beschäftigen.
    Vielen Dank und viele Grüße
    Rasmus

  • Sorry das ich das Thema wieder ausgrabe aber ich habe das selbe Problem mit einer kleinen Erweiterung.

    Wie kann ich den Mindestbestellwert von der Versandzone abhängig machen?

    Es geht um einen Lieferservice der je nach PLZ-Gebiet unterschiedliche Mindestbestellwerte hat. In den Versandzonen habe ich bereits diese Gebiete angelegt und jeweils mit Versandpauschale, kostenfreie Lieferung ab X€ und kostenlose Abholung vor Ort angelegt.

    Nun fehlt nur noch der Mindestbestellwert der eben auch abhängig von der Versandzone variiert.

    Ich denke ich muss diesen Teil des codes modifizieren, richtig?

    [Code]
    if (is_checkout()){
    $minorder = 50;
    [Code]

    Bin in PHP leider eine Niete aber vielleicht hat jemand dieses Problem bereits gelöst und kann mir helfen?

    Danke und Gruß Tobias

    P.S. Es ist natürlich die neuste Wordpress und Woocommerce Version mit Storefront installiert.

  • Das Problem solcher "Wünsche" ist, dass sie nicht praktikabel sind. Die Versandzone wird erst mit Eingabe der Adresse bekannt. Teilt man dem Kunden dann erst mit, dass es einen Mindestbestellwert gibt ist er sauer. Vernünftig lösen kann man das nur mit einer Abfrage der Lieferanschrift bevor der Einkaufsvorgang beginnt. Will man das tatsächlich erst im Checkout erledigen geht das nicht mit einer reinen PHP Lösung. Es muss als Ajax Lösung (jQuery + PHP) eingebaut werden. Allemal schlauer wäre aber ein genereller Hinweis auf die Mindestbestellmengen an prominenter Stelle mit Mindermengenzuschlag, falls die Mindestbestellwerte nicht erreicht werden (Pizzadienst ...). Das kann man Plugins für Gebühren (z.B. Bolder Fees) erledigen.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!