WooCommerce Preisspanne: Von bis Preise in Ab Preise ändern

von | Feb 15, 2018 | eCommerce, Technik | 39 Kommentare

Schlagwörter: functions.php - WooCommerce

Wenn man ein WooCommerce Shop besitzt und variable Produkte eingebaut hat, dann sieht man bei der Preisanzeige ein „Von bis“ Preisanzeige – also „2-10 CHF“.
Manchmal möchte man aber als Shopbetreiber nicht, dass man den Maximalen Preis angezeigt bekommt – denn das könnte Kunden abhalten zu kaufen. Aus diesem Grund möchte man vielleicht die Preisanzeige in der Übersichtseite so umformatiert haben „Ab 2 CHF“.

Video

Snippet

Mit diesem einfachen Snippet ist das Möglich – einfach dieses Snippet in die functions.php File reinkopieren und abspeichern und dann ist die Anzeige angepasst.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
add_filter( 'woocommerce_variable_sale_price_html', 'wc_wc20_variation_price_format', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'wc_wc20_variation_price_format', 10, 2 );
function wc_wc20_variation_price_format( $price, $product ) {
// Main Price
$prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
$price = $prices[0] !== $prices[1] ? sprintf( __( ' ab %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
// Sale Price
$prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) );
sort( $prices );
$saleprice = $prices[0] !== $prices[1] ? sprintf( __( ' ab %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
 
if ( $price !== $saleprice ) {
$price = '<del>' . $saleprice . '</del> <ins>' . $price . '</ins>';
}
return $price;
}

39 Kommentare

  1. Aykut

    Funktioniert bei uns nicht:

    syntax error, unexpected ‚&‘

    Antworten
    • Eric-Oliver Mächler

      danke für die Info @aykut – du hast absolut recht. ich weiss nicht warum es die formatierung des codes zerschossen hat. Habe es nun korrigiert und jetzt sollte der code gehen.
      das „syntax error, unexpected ‘&’“ bedeutet, dass im Code drin komische Zeichen enthalten sind – wie das schräge und falsche ‘ Zeichen anstatt das gerade und richtige ‚ Zeichen.
      Nochmal Danke für die Info und noch eine gute Zeit

      Antworten
      • Andrew

        Leider wieder syntax error… Jemand eine Idee wieso?

        Antworten
        • Eric-Oliver Mächler

          hast du genau geschaut ob die einzelne gänsefüsschen eben ein ‚ ist und nicht ein zb `oder so – da muss man aufpassen

          Antworten
    • Holger

      Hi, funktioniert das auch bei „buchbaren“ Produkten. Ich nutze das Plugin „booking and appointments PRO“

      Antworten
      • Eric-Oliver Mächler

        hallo holger, ja ich denke es „sollte“ funktionieren. aber leider kenne ich dein Plugin nicht und habe es auch nicht. Darum einfach mal testen! wenn du ein backup zur sicherheit machst inkls db – dann bist ja auf der sicheren seite und kannst sowas ausprobieren

        Antworten
  2. Samy

    Super einfach vielen Dank!

    Antworten
    • Eric-Oliver Mächler

      ja bitte bitte 🙂

      Antworten
  3. Andreas

    Hallo,
    nachdem ich den Code eingegeben habe ist nun das „inkl. Mwst“ weg.

    Antworten
  4. Sascha Devic

    Hallo.

    Vielen Dank für den tollen Tipp. Das klappt wirklich super.
    Ich arbeite zur Zeit an einem mehrsprachigen Onlineshop und würde das „ab x€“ gerne nur in der deutschen Version meines Shops angezeigt bekommen. Gibt es eine Möglichkeit das „ab“ in der Englischen Version zu entfernen oder zu übersetzen?

    Antworten
    • Eric-Oliver Mächler

      Hoi Sascha, Nun für mehrsprachige Webseiten gibts ja verschiedene Plugins – zb WPML. Du hast leider nicht gesagt, welches du dafür einsetzt. Aber ich kann dir jetzt schon sagen, dass dieser Code für diese Plugins angepasst ist und den den String somit einfach übersetzen kannst.

      Antworten
      • Sascha Devic

        Hallo Eric-Oliver.
        Vielen Dank für deine Antwort. Ich nutze Polylang, allerdings ist es mir damit nicht möglich den String zu übersetzen. Vielleicht hast du ja einen Tipp für mich.

        Antworten
          • Sascha Devic

            Hallo Eric-Oliver.

            Genau, die Funktion wird nicht erkannt und ich finde daher den richtigen String nicht, sondern nur die normale Einstellung:

            {min_price} – {max_price}.

            Im Shop wird mir allerdings der ab-Preis angezeigt.

          • Eric-Oliver Mächler

            ok, ja dann hat es damit zu tun, dass es ein snippet ist, weisst du wie du daraus ein plugin machen kannst? dann sollte es gehen.
            Wie gesagt es ist eigentlich mehrsprachenfähig – das sieht man an diesen komischen texten – zb – __( ‚ ab %1$s‘, ‚woocommerce‘ )

  5. Mirko

    Kann der Steuer Suffix wieder hinzugefügt werden ?

    Antworten
  6. Leon

    Funkioniert bei mir Super! Dankeschön!!

    Antworten
    • Eric-Oliver Mächler

      danke für dein feedback – freut mich wens geklappt hat

      Antworten
  7. Michael Beyer

    Geht es hier um die ‚functions.php‘ des Themes oder um die des WooCommerce-Plugins?

    Antworten
    • Eric-Oliver Mächler

      Hallo Michael, du musst nie was in einem Plugin direkt einfügen oder verändern. Es gibt immer nur um die functions.php deines (hoffentlich) Child-Themes!

      Antworten
  8. Sabine

    Diese Lösung funktioniert prima, vielen Dank.

    Gibt es auch eine Lösung für folgendes Prolbem: Bei Varianten ändert sich der Preis ja, sobald man bestimmte Produktattribute auswählt (z. B. Größe, Material etc.).

    Standardmäsßig (Theme Storefront) steht der Preis aber ganz oben. Ich sehe als User nicht, wie sich der Preis geändert hat, sobald ich alle Attribute ausgewählt habe.

    Ich möchte gerne den endgültigen Preis auf der Produkteinzelseite anzeigen, bevor das Prudukt in den Warenkorb gelegt wird.

    Ist das möglich?

    Danke und Grüße
    Sabine

    Antworten
  9. Sabine

    Nachtrag:

    Ich möchte meine Frage nochmal verständlicher formulieren:
    Ist es möglich, dass auf der Produkteinzelseite der endgültige Preis unten vor dem Button „in den Warenkorb legen“ nochmals angezeigt wird?

    Antworten
    • Eric-Oliver Mächler

      hi sabine. ja das ist möglich es ist aber eine template sache – da kannst du sowas anpassen

      Antworten
      • Sabine

        Danke für die schnelle Antwort!

        Schade, ich dachte, ich kann es über Hooks in der functions.php lösen. Sind Child-templates denn stabil, was Updates angeht?

        Allerdings weiß ich weder, was genau im template ich ändern muss, noch, wie ich den Hook in der functions.php ansprechen muss bzw. was ich angeben muss, damit der Preis nicht vom einen Hook zum anderen erschoben wird, sondern an einem weiteren Hook zum 2. Mal ausgegeben wird.

        Gibt es dazu nicht irgendwo ein Beispiel?

        Antworten
        • Eric-Oliver Mächler

          child themes werden nicht von updates betroffen. ich persönlich würde sowas über das design lösen und nicht über hooks. aber ich bin auch nicht auf dem laufenden was storefront betrifft. evtl gibts dafür sogar einen hack oder eine einstellung.

          Antworten
  10. Martin

    danke schön, hat bei mir wunderbar funktioniert (Divi theme)

    Antworten
    • Eric-Oliver Mächler

      freut mich wens funktioniert 🙂 bis bald wieder und danke für dein feedback

      Antworten
  11. marcel

    Diese Lösung funktioniert super und dank dem Video kinderleicht.

    Kann man dies auch bei der Kategorieanzeige anwenden? Meine Produkte haben eine Hauptkategorie (Label) und 2 Nebenkategorien(Men,Women). Im Shop werden immer alle 3 Angezeigt(ich habe es deaktiviert) . Ich würde gerne das nur der Name der Hauptkategorie angezeigt wird.

    Antworten
    • Eric-Oliver Mächler

      je nachdem was für ein design du verwendest, zeigt diese lösung auch die „ab xyz preis“ bei kategorien an. wie ich bei dir gesehen funktioniert es ja überall schön bei woman, men und sale… was meinst du nun mit name der hauptkategorie angezeigt? das scheint teil einer anderen frage zu sein….

      Antworten
    • Eric-Oliver Mächler

      ja bitte gerne 🙂

      Antworten
  12. Rainer

    Danke für das Video, hat mir sehr geholfen. Aber wie bekomme ich hin, wenn dann eine der Varianten ausgewählt wird, dass nur noch der Preis dieser Variante sichtbar ist.
    Danke im Voraus.

    Antworten
    • Eric-Oliver Mächler

      Hallo, wenn du das Video genau anschaust, dann siehst du das genau der Preis der entsprechende Variante angezeigt wird. WO das angezeigt wird, ist Sache deines Designs – aber sonst wird bei jeder Veränderung des variablen Produkts der entsprechende Preis immer automatisch aktualisiert.

      Antworten
    • Eric-Oliver Mächler

      ja bitte – immer wieder gerne

      Antworten
  13. Markus Landauer

    Der Hammer! Simpel und funktioniert – danke dafür!

    Antworten
  14. Roli Locher

    Hallo Eric
    Der Code hat bis gestern bei uns einwandfrei funktioniert, Nun wird diese Funktion einfach übergangen, kein Fehler oder sowas, hat eben einfach keine Funktion mehr.

    Grüsse
    Roli Locher

    Antworten
    • Eric-Oliver Mächler

      Hoi Roli – nun ich habs es gerade in mehreren aktuellen Shops eingebaut und überall gehts ohne problem. hast du irgend ein neues plugin eingebaut oder was am code verändert? was sagt errorlog oder die console?

      Antworten
      • Roli

        es gibt kein Error aus, die Funktion wird einfach übergangen. Hat bis vor kurzen funktioniert , habe Marketpress B2B installiert und ELEX Rollenbasierte Preise , beide zum test deaktiviert keine Veränderung. Rocket Cache läuft.
        Der Fehler kam meiner Meinung nach Update BETHEME. Da hat es einiges durcheinander gebracht, musst das Cache für CSS abstellen.

        Antworten

Einen Kommentar abschicken

Du kannst auf Fediverse-Profile verlinken, indem du fl:@benutzername in deinem Kommentar eingibst.

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert