So erhalten Sie Woocommerce-Preisattribute

Lesezeit: 4 Minuten

Benutzer-Avatar
Wayne

Ich versuche, die folgenden Informationen auf einer WooCommerce-Einzelproduktseite zu erhalten, um den Standardpreisstil von WooCommerce zu ersetzen.

Wenn Artikel im Angebot ist, möchte ich in der Lage sein, den Originalpreis und den reduzierten Preis zu erhalten und ihn in einem Tauchgang für weiteres Styling wiederzugeben. Ich versuche, so etwas zu erreichen.

<div id="orig-price">Original Price: <?php echo $price; ?></div>
<div id="sale-price">Sale Price: <?php echo $sale-price; ?></div>
<div id="saved">You saved: <?php $saved=$price-$saleprice; echo $saved; ?></div>

Ich habe versucht, price.php zu öffnen, habe aber nicht gefunden, wonach ich suche. Hier ist, was ich bekomme.

<div itemprop="offers" itemscope itemtype="http://schema.org/Offer">

    <p class="price"><?php echo $product->get_price_html(); ?></p>

    <meta itemprop="price" content="<?php echo $product->get_price(); ?>" />
    <meta itemprop="priceCurrency" content="<?php echo get_woocommerce_currency(); ?>" />
    <link itemprop="availability" href="http://schema.org/<?php echo $product->is_in_stock() ? 'InStock' : 'OutOfStock'; ?>" />
    <div><?php echo $sale_price_in_percent; ?></div>

</div>

Bin ich am richtigen Ort? Weiß jemand, wie ich auf diese Attribute zugreifen kann?

Vielen Dank

Benutzer-Avatar
Daniel

Hauptfunktion zum Anzeigen von Preisen ist get_price_html() in /woocommerce/includes/abstracts/abstract-wc-product.php Datei, und es gibt einige Filter, mit denen Benutzer den HTML-Code für Preise anpassen können:

  • woocommerce_sale_price_html
  • woocommerce_price_html
  • woocommerce_empty_price_html
  • woocommerce_free_sale_price_html
  • woocommerce_free_price_html
  • woocommerce_get_price_html

Diese Funktion führt einen vollständigen Job zum Anzeigen von Preisen einschließlich Steuern und Rabattberechnungen aus, und da Sie die HTML-Datei komplett neu schreiben, verwendet das Beispiel unten den letzten Filter dort woocommerce_get_price_html. Es extrahiert die Preise aus dem ursprünglichen HTML und fügt sie in eine neue HTML-Struktur ein.

add_filter( 'woocommerce_get_price_html', function( $price, $product ) 
{ 
    global $woocommerce_loop;

    // check if we are in single product page, in main section, and if product has price and is on sale
    if ( is_product() && !isset( $woocommerce_loop ) && $product->get_price() && $product->is_on_sale() ) {

        // collect prices from $price html string
        $prices = array_map( function( $item ) {        
            return array( $item, (float) preg_replace( "/[^0-9.]/", "", html_entity_decode( $item, ENT_QUOTES, 'UTF-8' ) ) );           
        }, explode( ' ', strip_tags( $price ) ) );

        $price = isset( $prices[0][0] ) ? '<span class="orig-price">Original Price: ' . $prices[0][0] . '</span>' : '';
        $price .= isset( $prices[1][0] ) ? '<span class="sale-price">Sale Price: ' . $prices[1][0] . '</span>' : '';

        if ( $product->get_regular_price() ) {
            // set saved amount with currency symbol placed as defined in options
            $price .= '<span class="saved">You saved: ' . sprintf( get_woocommerce_price_format(), get_woocommerce_currency_symbol(), $prices[0][1] - $prices[1][1] ) . '</span>';      
        }
    }

    return $price;

}, 10, 2 );

Ich verwende hier span-Tags anstelle der fraglichen divs, da die Ausgabe immer noch in einen Absatz eingeschlossen ist. Für weitere Anpassungen überschreiben Sie die Vorlage price.php, indem Sie sie darin platzieren /themes/yourtheme/woocommerce/single-product/ Mappe.

  • Vielen Dank. Dies scheint zu funktionieren, bis auf den eingesparten Betrag. Es wird nicht angezeigt. Originalpreis und Verkaufspreis funktionieren gut.

    – Wayne

    27. April 2014 um 10:58 Uhr

  • Es wird überhaupt nicht angezeigt oder nur der Betrag, es hat gut funktioniert, als ich es getestet habe. Der Verkaufsbetrag wird nur für Produkte angezeigt, die im Angebot sind, und nicht für Produkte mit Preisschwankungen oder Produkten zu regulären Preisen, übrigens. Ich verwende WC 2.1.5.

    – Daniel

    27. April 2014 um 11:28 Uhr

  • Es zeigt sich überhaupt nicht. sehen Verknüpfung Es gibt nur 200 $ und 150 $, die Originalpreis und Verkaufspreis sind. Wie kann ich es schaffen, jedes für sich auszugeben? nicht verkettet, damit ich sie an die richtige Stelle setzen kann. Vielen Dank

    – Wayne

    27. April 2014 um 12:00 Uhr

  • Verwenden Sie var_dump für das $prices-Array, um zu sehen, was passiert. Jede einzeln auszugeben ist ziemlich schwierig. Sie können die oben aufgeführten Filter für die individuelle Preisformatierung verwenden, aber am Ende wird alles verkettet. Wenn Sie tiefer gehen möchten, öffnen Sie die Datei abstract-wc-product.php, um zu sehen, wie Preise generiert werden und welche Funktionen und Aktionen verfügbar sind.

    – Daniel

    27. April 2014 um 12:12 Uhr

  • dies ist das Ergebnis des Vardump. array(2) { [0]=> array(2) { [0]=> string(11) "$200.00" [1]=> float(36200) } [1]=> array(2) { [0]=> string(11) "$150.00" [1]=> float(36150) } } es gibt keinen Wert von gespeichert. auch, warum gibt es 36200 und 36150. sollten es nicht nur 200 und 150 sein? Warum gibt es 36 vor beiden Float-Preisen? (Originalpreis und Verkaufspreis)

    – Wayne

    27. April 2014 um 14:17 Uhr

Benutzer-Avatar
Ratnakar – StoreApps

Dies kann durch Überschreiben der Woocommerce-Vorlage erreicht werden. Erstellen Sie eine neue PHP-Datei, schreiben Sie Ihre div-Struktur in diese Datei.

Verweisen Sie nun auf diesen Artikel So überschreiben Sie die Vorlage in WooCommerce

Hoffe, das wird Sie in die richtige Richtung bewegen

  • Das Problem besteht im Moment darin, die Preise abzurufen und dann Vorlagen zu überschreiben. Ich habe zu dieser Dokumentation gehört und es wird unter Vorlagen die Datei price.php angezeigt, und es wird der Grundpreis angezeigt. müssen Verkaufspreis, Rabatt, prozentualer Rabatt usw. genommen werden. Gibt es dafür Unterlagen?

    – Wayne

    27. April 2014 um 12:12 Uhr

1312210cookie-checkSo erhalten Sie Woocommerce-Preisattribute

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy