Je kan aan WooCommerce op twee manieren prijzen toevoegen:
- Een product heeft één prijs
- Een product heeft meerdere prijzen
In het geval van optie 2 kan je denken aan een broek met verschillende maten, kleuren of opties. WooCommerce zal dan de prijs op de overzicht- en detailpagina’s tonen als een prijsrange van bijvoorbeeld “€ 200 – 300”.
Als dit niet wenselijk is kan je door middel van de onderstaande PHP functie de vanaf prijs tonen. Er komt op de overzicht- en detailpagina’s dan “Vanaf € 100” te staan. De functie plaats je in het functions.php bestand van je webwinkel thema.
Bekijk ook het nieuwe bericht “WooCommerce toon Vanaf prijs en geen prijsrange bij aanbiedingen“.
/** * Show a minimum price not a price range. * Version: Woocommerce 2.0 **/ add_filter('woocommerce_variable_price_html', 'custom_variation_price', 10, 2); function custom_variation_price( $price, $product ) { if ($product->min_variation_price) { $price = '<span>' . _e('Vanaf') . '</span>'; $price .= woocommerce_price($product->min_variation_price); } return $price; }
Als je alleen wilt dat de tekst “Vanaf” getoond wordt als er een verschil tussen de minimale/maximale prijs zit gebruik dan onderstaande code:
Woocommerce 2.0
/**
* Show only the text "Vanaf" when there is a difference between
* $product->min_variation_price AND $product->max_variation_price
* Version: Woocommerce 2.0
*/
add_filter('woocommerce_variable_price_html', 'custom_variation_price_ifdiffer', 10, 2);
function custom_variation_price_ifdiffer( $price, $product ) {
if ($product->min_variation_price !== $product->max_variation_price) {
$price = '' . _e('Vanaf') . ' ';
$price .= woocommerce_price($product->min_variation_price);
}
return $price;
}
Woocommerce 3.0
Klik hier voor versie voor WooCommerce 3 toon Vanaf prijs en geen prijsrange
Getest op: WordPress 4.0.1 en Woocommerce 2.2.8.
Perfecte oplossing!
Dank je Tim,
Dit heeft mij geholpen voor producten die niet in de aanbieding zijn. Producten met een “van” en “voor” prijs tonen nog steeds de laagste prijs en de hoogste prijs (en dat zowel in de “van” range als de “voor” range)
bijvoorbeeld: €3.666,00–€4.818,00 doorgestreept gevolgd door €2.174,00–€2.964,00 incl btw
Weet je hoe deze situatie ook aan te passen is?
Thanks,
Dave
Oplossing 1:
Vervang woocommerce_variable_price_html voor woocommerce_variable_sale_price_html.
Je kan de bestaande regel code ook kopiëren en en dan aanpassen.
Heb het niet getest, want in onze webwinkel hebben we even geen aanbiedingen zover ik kon controleren.
Oplossing 2:
Controleer in de functie custom_variation_price of je product wel een min_variation_price heeft.
Als die leeg is of niet bestaat zal de prijsrange niet aangepast worden. Daar controleert het IF statement op.
Mogelijk dat je een andere waarde moet gebruiken van $product.
Je kan hiervoor het gemakkelijkste onder function custom_variation_price deze regel plaatsen.
echo ‘
‘;
Hoi Tim, bedankt voor je reactie. Ik heb beiden geprobeerd en getest, maar geen effect. Nu ben ik ook niet goed in coderen, dus wellicht heb ik wat verkeerd gedaan. Zou je de oplossing in zijn context kunnen doorgeven, dus verwerkt in de originele code van deze post. Eventueel eerst via een PM zodat ik kan testen en deze post niet vervuild wordt met trial en error.
Hoi Dave,
Heb het vandaag even uitgezocht en een nieuwe functie geschreven die wel werkt. Je vind hem in het onderstaande nieuwe bericht:
https://www.timdehoog.nl/2014/04/13/woocommerce-toon-vanaf-prijs-en-geen-prijsrange-bij-aanbiedingen/
Gr, Tim
Hoi Tim,
Hartelijk dank voor het uitzoeken en het posten van de oplossing. Het werkt nu ook goed voor variaties met een sales prijs.
Gr, Dave
Hallo Tim,
op mijn nieuwe site heb ik gegroepeerde producten staan. Ook daar komt bij de parent een prijsrange te staan en bij het product.
Ik heb je oplossing in functions.php gezet, maar helaas zonder resultaat. Waarschijnlijk omdat het dus niet om een variabel product gaat.
Weet jij een ingreep die jouw oplossing ook geschikt maakt voor gegroepeerde producten?
Dank en groeten
Geert
Beste Geert,
Mijn excuses voor de late reactie, mijn website stuurt niet altijd een e-mail als er een nieuwe reactie is toegevoegd.
Heb je de oplossing nog niet gevonden dan wil ik je best helpen, stuur even via het contactformulier de een link van de pagina waar je de oplossing toe zou willen passen.
Gr, Tim
Hoi Tim,
Nu ben ik echt nog een leek op het gebied van WP en WooCommerce, laat staan coderen in PHP 😉 Toch wil ik het proberen om jouw oplossing ook bij mijn eerste offline-site door te voeren.
Mijn vraag is dan ook… in welk document moet het PHP script komen te staan? Waar vind ik dat, want ik zie door de bomen het bos niet qua documenten…
Thanx
Hoi Ike,
Je plaatst het stukje code uit het artikel in het bestand functions.php.
Dit bestand vind je in:
wp-content/themes/JOUWTHEMA/functions.php
Waarin JOUWTHEMA natuurlijk vervangen moet worden met het thema dat je gemaakt, gedownload of gekocht hebt.
Als het bestand nog niet bestaat kan je dat toevoegen.
Wordpress zal dit automatisch detecteren.
Gr, Tim
Hallo Tim,
De code werkt super! alleen werk ik met group pricing.. dit is een plugin die verschillende prijzen laat zien aan verschillende klantengroepen.
Op het moment dat ik als beheerder de website bekijk dan werkt de code. Dan staat er netjes vanaf 1,70.. alleen op het moment dat ik als een klant inlog en de korting verrekend wordt staat er weer gewoon 1,70 – 5,95.
Heb je hier een oplossing voor ? Het zou me echt verder helpen!
Met vriendelijke groet,
Lars van Sloun
Hoi Lars,
De plug-in die je noemt gebruiken wij niet en ken ik ook niet.
Ik vermoed dat deze plugin gebruik maakt van dezelfde filter zoals in mijn snippet is te zien.
Als eerste oplossing zou je daarom kunnen kijken of de plugin dat ook echt doet en welke priority hij toekent. In mijn snippet gebruik ik 10, maar als hij 11 of hoger gebruikt wordt zijn functie na deze functie uitgevoerd.
De kans is groot dat de wijziging die mijn snippet doet ongedaan of aangepast wordt door de plugin.
Meer info over add_filter:
http://codex.wordpress.org/Function_Reference/add_filter
Gr, Tim
Dag Tim!
Super code, enkel heb ik een probleem op mijn site. Ik heb de code in mijn functions.php gezet, alleen wordt er nu naast de vanaf prijs ook de prijsrange getoond. Ook staat het woord “vanaf” niet voor de vanaf prijs. Dit gebeurd op de volgende pagina’s: http://tinyurl.com/lytx3xs / http://tinyurl.com/lr4q3je. Wat gaat er hier mis?
Gr.
Hoi Lars,
Gebruik je nog andere plugins voor Woocommerce die invloed hebben op de presentatie van de prijzen?
Ik heb het vermoeden dat mijn snippet helemaal niet uitgevoerd wordt.
Dit kan je gemakkelijk testen door voor de regel:
if ($product->min_variation_price) {
Dit te typen:
var_dump(’test’);
var_dump($product->min_variation_price);
Je weet dan meteen dat hij in die custom functie komt en of min_variation_price een waarde heeft. Als die waar niet bestaat zal hij de prijs ook niet aanpassen.
Heb je de code letterlijk zo gelaten of aangepast? Gebruik je geen andere custom functies die dezelfde filter gebruiken?
Hey Tim,
Bedankt voor je antwoord. Ik gebruik geen plugins die invloed hebben op de prijs. Het kan wel zijn dat er een andere functie dezelde filter (10??) gebruikt. Naar welke waarde moet ik dit veranderen? Als ik de vardump code voor de if statement zet crasht de pagina waarop variabele prijzen staan. Geeft dit iets aan?
Gr.
Hoi Lars,
Sorry ik had een foutje gemaakt vardump moet var_dump zijn. Nu wordt een functie uitgevoerd die niet bestaat en daardoor crasht de pagina.
Ja het kan zijn dat een andere functie dezelfde filter gebruikt. Met het getal 10 geef je de prioriteit aan. Dus als je 9 gebruikt wordt de functie eerder uitgevoerd dan een functie met 10. Als twee functies hetzelfde getal hebben dan wordt de functie die als eerste gevonden wordt als eerste uitgevoerd.
Pas even vardump naar var_dump aan en test het dan nogmaals.
Hoi Tim, werkt perfect. Thnx. Aanvullende vraag, hoe kan ik de kleur aanpassen zodat het de kleuren van mijn thema overneemt? Nu is het zo stemmig zwart (hoewel veel fijner dan eerst, geef ik grif toe)
Hoi Suzanne,
Geen dank natuurlijk!
Als je even de URL stuurt van de pagina waarop je de kleur wilt aanpassen kan ik vertellen wat je moet doen. Dit verschilt per website. Waarschijnlijk moet je de style.css of custom.css aanpassen.
Gr, Tim
Hey Tim,
Dank voor de tips, ook via e-mail. Ik heb alles aan kunnen passen naar wens en bovendien een duidelijke uitleg css (schrijven) gehad.
Thanx!
Hey Tim,
Je code werkt perfect. Heb alleen 1 vraagje. Onze webwinkel is meertalig. Hoe kan ik er voor zorgen dat het woord vanaf vertaald word als de Engelse taal word geselecteerd?
Gr,
Hoi Dennis,
Je kan dit doen door de code aan te passen zodat het vertaald kan worden.
Dit:
$price = 'Vanaf';
Wordt:
$price = '' . _e('Vanaf') . '';
Zie voor meer informatie:
http://codex.wordpress.org/Function_Reference/_e
Je kan dan vervolgens het vertaalbestand bijwerken met bijvoorbeeld PoeEdit en de juiste vertalingen doorvoeren.
Gr, Tim
Beste Tim,
Super code die ook werkt, echter verschijnt nu bij al mijn variabele producten vanaf, ook al is de prijs gelijk (dus geen duurdere prijzen). Deze producten zijn variabel vanwege kleuren maar net zo duur.
Heb jij nog een stukje aanvullende code om dit op te vangen. Dus dat er alleen vanaf komt te staan indien er hogere prijzen in de variaties zitten?
Alvast bedankt en groet,
Rogier
Hoi Rogier,
Ik heb een nieuwe snippet toegevoegd aan dit bericht die voldoet aan jouw wensen.
Op zich maar een kleine aanpassing van de originele snippet.
Gr, Tim
Top het werkt ook nog 😉
Bedankt Tim!
Hallo Tim,
Ik ben bezig met het maken van een webshop voor een groothandel. Hierbij wil ik dat op de productpagina 2 prijzen worden getoond. Namelijk de consumenten prijs (de van prijs) en de dealerprijs (de voor prijs).
De situatie is nu als volgt. De “van” prijs wordt weergeven als oude prijs, dus met een streep door de prijs en de “voor” prijs wordt dik gedrukt weergegeven.
De situatie zoals ik deze graag zou zien is de de “van” prijs wordt weergegeven als “consumentenprijs: €…” (dus ook niet doorgestreept). en de actieprijs weergegeven als “uw dealer prijs: €…”.
Zou jij mij hierbij kunnen helpen? Heb al veel gezocht op internet maar dit bericht kwam het meest in de buurt van wat ik zocht.
Alvast bedankt!
Groeten, Melvyn
sorry, het is al gelukt. Heb de volgende code in het style.css bestand van het thema toegevoegd. Misschien dat het iemand anders ook helpt:
del .amount::before,
ins .amount::before {
margin-right: 5px;
}
del .amount::before {
content: ‘Consumentenprijs: ‘;
text-decoration: ‘blink’;
}
ins .amount::before {
content: ‘Uw dealer prijs:’;
}
Groeten, Melvyn
Hoi Melvyn,
Super dat je je oplossing wilt delen.
Werkt dit op alle browsers, ook IE 8 en 9?
Gr, Tim
Hey Tim,
Ik heb ook jouw code gebruikt voor het veranderen van de prijsweergave. Alleen wil ik dat er geen vanaf komt te staan en dat de enkel de laagste prijs word weergegeven. Zou jij mij kunnen vertellen hoe ik dat voor elkaar krijg?
Ben al er al een tijdje mee bezig geweest maar ik kom er zo 123 niet uit.
Groeten,
Bart
OPGELOST!
Voor iedereen die ook graag enkel de vanaf prijs wil tonen in plaats van een prijsrange of met de toevoeging ‘vanaf’ hieronder de oplossing. Met dank aan Tim de Hoog!
Met onderstaande snippet in je functions.php file zou het moeten lukken:
/**
* Show a minimum price not a price range.
**/
add_filter(‘woocommerce_variable_price_html’, ‘custom_variation_price’, 10, 2);
function custom_variation_price( $price, $product ) {
if ($product->min_variation_price) {
$price = woocommerce_price($product->min_variation_price);
}
return $price;
}
groet,
Bart
Hallo Tim,
Ik heb jouw vanaf code gebruikt, echter zet hij nu vanaf in de link met de artikelnaam en staat de prijs weer op een volgende regel.
Enig idee hoe dat kan?
Alvast bedankt!
Groeten Kathleen
Hoi Kathleen,
Heb je een URL voor mij van de pagina waar het fout gaat?
Gr, Tim
Hallo , ik heb voor het eerst een update uitgevoerd en heb nu alle prijzen in mijn webwinkel op Gratis! staan.
Na uren zoeken kom ik niet verder , ik hoop dat iemand mij op deze manier kan helpen.
Alvast bedankt voor het meedenken.
Hoi Dennis,
Heb even snel http://www.bosbeton.com bekeken maar zie dat er weer prijzen bij de producten staan.
Kan ik ervan uitgaan dat het probleem al opgelost is?
Gr, Tim
Hallo Tim,
Bedankt voor de code, deze werkt goed. Ik heb alleen een vraag, ik heb alle prijzen exclusief BTW ingevoegd zodat de prijzen volgens het juiste BTW tarief worden doorgerekend. Alleen wanneer ik de code toevoeg rekenen de “Vanaf” prijzen niet meer door met de BTW maar komt er het bedrag exclusief BTW te staan. Weet jij hoe ik dit kan oplossen?
Gr. Sander
Hallo Tim,
Ik weet ondertussen al hoe je de code moet aanpassen zodat je prijzen inclusief belasting krijgt (wanneer je de prijzen exclusief hebt ingevuld).
Deze oude regel:
“$price .= woocommerce_price($product->min_variation_price);”
Vervang je door:
“$price .= woocommerce_price($product->get_price_including_tax());”
Heb nog wel een nieuwe vraag: wanneer je deze code invoert krijg je in de product categorieën een verschil in hoogte bij de prijzen (dit lijnt niet meer mooi strak uit omdat het woord “vanaf” ertussen is gekomen).
Weet jij hoe ik de uitlijning weer strak kan krijgen?
Gr. Sander
ik ook, wanneer je deze code invoert krijg je in de product categorieën een verschil in hoogte bij de prijzen (dit lijnt niet meer mooi strak uit omdat het woord “vanaf” ertussen is gekomen).
deze zet vanaf naast de prijs
// Use WC 2.0 variable price format
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 ) {
$min_price = $product->get_variation_price( ‘min’, true );
$price = sprintf( __( ‘From: %1$s’, ‘woocommerce’ ), wc_price( $min_price ) );
return $price;
}
Hoi Henk,
Bedankt voor het delen van je oplossing.
Mijn oplossing werkt wel maar zet om het woord “Vanaf” span tags neer en maakt gebruik van de class “from”.
Jouw thema zal hier andere CSS styles voor hebben dan het thema waar ik het op getest heb met als resultaat dat de uitlijning niet netjes meer is.
Gr, Tim
Beste Tim,
dank voor je blog. Ik heb de eerste code gebruikt en die werkt prima.
Mijn instelling dat achter elke prijs “incl. BTW” staat vermeld, doet het dan alleen niet meer.
Kun jij me tippen waar ik dat in de code moet toevoegen?
Dank en groeten
Geert
Je kan het gemakkelijkste onder regel 8 de volgende regel plaatsen:
$price .= ‘ incl. BTW’;
Achter iedere prijs wordt dan die tekst geplaatst.
Gr, Tim
Hoi Tim,
Is het mogelijk om het woord “vanaf” ook weg te halen zodat de artikelen weer mooi uitlijnen?
Ja je moet hiervoor de onderstaande regels:
$price = ‘‘ . _e(‘Vanaf’) . ‘ ‘;
$price .= woocommerce_price($product->min_variation_price);
Aanpassen naar:
$price = woocommerce_price($product->min_variation_price);
Dank je wel, het is gelukt!
Hoi Tim!
Geweldige oplossing van jou.
Ik gebruik jouw code nu in onderstaande website (in aanbouw).
In ProductGrid werkt dit perfect. echter in de ProductList niet, van komt ‘vanaf’ boven de titel te staan van het product in plaats van voor het bedrag.
Heb jij hier een oplossing voor?
—
http://nlboos-osterwaal.savviihq.com/?page_id=181
(Zie Aardbei Karaf 2L)
Hoi Marc,
Kan je eens je thema in een ZIP file via het contactformulier sturen dan kan ik ernaar kijken.
Ik vermoed dat het thema namelijk invloed heeft op bovenstaande functie. Vanaf staat namelijk buiten de lijstweergaven getoond in de HTML code.
Gr, Tim
Een langzamere reactie kan haast niet, ik zal vanavond het Thema sturen. Alvast bedankt!
Zojuist gestuurd tim!
Hey Tim!
Had jij al naar het thema kunnen kijken?
Gegroet!
Hallo Tim,
Ik gebruikte jouw stukje code om een vanaf prijs te laten zien en dit werkte perfect. Alleen nu Woocommerce een update heeft gehad naar 3.0 werkt de code niet geheel vlekkeloos meer helaas.
Je krijgt nu foutmeldingen te zien. Ik heb totaal geen verstand van PHP code maar je ziet nu in beeld staan dat er “iets” qua prijs niet rechtstreeks aan geroepen mag worden.
Heb jij enig idee wat dit kan zijn? 🙂
Grt,
Marcel
Hoi Marcel,
Ik heb zelf maar een website met WooCommerce en deze maakt nog gebruik van versie 2.x. Kan je een screenshot sturen van je foutmelding via het contactformulier dan kan ik het misschien voor je oplossen?
Gr, Tim
Hoi Tim dank je voor je reactie. Kan volgens mij hier geen bijlage toevoegen dus ik plak de code die in beeld komt bij de artikelen die meerdere prijzen hebben maar even in dit bericht. De volgende code wordt weergegeven:
——————————————–
Notice: min_variation_price werd verkeerd aangeroepen. Producteigenschappen mogen niet rechtstreeks aangeroepen worden. Lees alles over foutopsporing in WordPress voor meer informatie. (Dit bericht is toegevoegd in versie 3.0.) in /home/neichaamsterdam/public_html/wp-includes/functions.php on line 4137
Notice: max_variation_price werd verkeerd aangeroepen. Producteigenschappen mogen niet rechtstreeks aangeroepen worden. Lees alles over foutopsporing in WordPress voor meer informatie. (Dit bericht is toegevoegd in versie 3.0.) in /home/neichaamsterdam/public_html/wp-includes/functions.php on line 4137
Vanaf
Notice: min_variation_price werd verkeerd aangeroepen. Producteigenschappen mogen niet rechtstreeks aangeroepen worden. Lees alles over foutopsporing in WordPress voor meer informatie. (Dit bericht is toegevoegd in versie 3.0.) in /home/neichaamsterdam/public_html/wp-includes/functions.php on line 4137
Notice: woocommerce_price is verouderd sinds versie 3.0. Gebruik in plaats daarvan wc_price. in /home/neichaamsterdam/public_html/wp-includes/functions.php on line 3829
——————————————–
Alvast bedankt en met vriendelijke groet,
Marcel
Zie als voorbeeld de volgende pagina:
<< adres verwijderd omdat deze offline is >>
Zoals je kunt zien wordt het eerste artikel niet juist weergegeven na de update van Woocommerce
beste Tim,
zou je me misschien kunnen vertellen hoe dit werkt met de nieuwste versie van woocommerce?
het werkte echt prima maar sinds de nieuwe versie lukt het me niet meer om het werkend te krijgen
mvg, Erik
Hoi Erik,
Jouw verzoek is vergelijkbaar met dat van Marcel.
Afgelopen weken ben ik er al enkele uren mee bezig geweest. Tot op heden heb ik het nog niet werkend gekregen.
WooCommerce heeft de programmacode aangepast waardoor de functie op deze pagina niet meer werkt.
Ben er mee bezig.
Gr, Tim
Hallo Tim,
Heb jij hier al een oplossing voor?
Hallo Rudi,
Onderaan het bericht staat ook een versie van de code voor WooCommerce 3.0.
Kan je die niet gebruiken?
Hoi Tim,
Ik heb het thema gebruikt voor mijn websites en is mijn functions.php nu als volgt opgebouwd. Waar theme staat staat het theme wat ik gebruikt heb.
Waar moet ik nu jouw code plakken?
<?php
/**
* (theme) functions and definitions
*
* @package (theme)
*/
require get_template_directory() . '/inc/init.php';
/**
* Note: Do not add any custom code here. Please use a child theme so that your customizations aren't lost during updates.
* http://codex.wordpress.org/Child_Themes
*/
Hoi Rik,
De code plaats je in het functions.php bestand van je thema. Op welke regel maakt niet uit. Wel is het voor jezelf handig om vergelijkbare functies naast bij elkaar te plaatsen.
Als je een thema hebt gedownload of gekocht is het wel zo handig om een child theme te maken.
Zie ook documentatie van de WordPress functies add_filter() en add_action() om te bepalen wanneer de code uitgevoerd moet worden.
Succes en gegroet,
Tim
Goedemiddag Tim.
De code heb ik in mijn functions geplakt, alleen hij pakt hem niet. Ik gebruik het total theme. Ook gebruik ik de laatste woocommerce version. Hij geeft nu twee prijzen weer: € 185.00 – € 246.00
Zie graag je reactie tegemoet.
Deze snippet werkt alleen voor versie 2 en niet voor versie 3.
Goedemiddag Tim,
Ik gebruik al een tijdje deze code en werkt perfect. Nu na de laatste updates, heb ik een probleem en ik hoop dat je me ermee kan helpen.
Op mijn website worden de prijzen pas zichtbaar na het inloggen (en dus ook het woordje “vanaf”). Nu staat “Vanaf” er altijd, ook als er geen prijs wordt weergegeven.
Zou jij het stukje script kunnen doorlezen wellicht zie jij gelijk waar er een aanpassing gemaakt moet worden ?
Ik hoop graag van je te horen.
Hoi Esther,
Welke versie van Woocommerce gebruik je op dit moment?
Heb je ook een link van een pagina die het probleem vertoont. Screenshots sturen via het contactformulier kan ook.
Gr, Tim
Hallo Tim,
Ik gebruik de volgende code:
add_filter(‘woocommerce_variable_price_html’,’wphelpdesk_variate_prijs_verschil’, 10, 2);
function wphelpdesk_variate_prijs_verschil( $price, $product ) {
if (count($product->get_children()) > 1) {
// De tekst ‘Vanaf’ is te wijzigen naar het woord dat je wilt weergeven
// Zorg wel dat je de ” laat staan!
$price = ” . __(‘Vanaf’) . ‘ ‘;
$price .= woocommerce_price($product->price);
}
return $price;
}
Werkt top! Alleen… ik heb alle prijzen exclusief BTW ingevoegd zodat de prijzen volgens het juiste BTW tarief worden doorgerekend. Alleen wanneer ik de code toevoeg rekenen de “Vanaf” prijzen niet meer door met de BTW maar komt er het bedrag exclusief BTW te staan. Weet jij hoe ik dit kan oplossen?
Mvg
Kan je $product->price() eens vervangen door $product->get_price_including_tax()
Groeten, Tim