✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Guide: Ändra priser i WooCommerce efter kod

93

Det här inlägget är för dig som vill lägga till kod som justerar priserna i din WordPress WooCommerce webshop. Du kan antingen höja priserna eller rabattera dem. Och hur och varifrån justeringarna kommer beror helt på ditt fall. Din webbshop kan fungera med procentuella rabatter som är inställda på varje registrerad användare, en anpassad global inställning i WooCommerce-inställningar, en hårdkodad fast summa eller något som är inställt på varje produkt eller produktkategori.

Jag har försökt göra koden så generell som möjligt så att du kan anpassa den efter ditt fall. I mitt fall kommer prisjusteringarna från en procentuell rabatt som lagts till som användarmeta.

Koden är uppdaterad för att fungera för WooCommerce 3.x och högre. Jag kan inte garantera att det kommer att fungera för lägre versioner.

Steg 1: Skapa en plats för din kod

Det första steget är enkelt; du behöver en plats för att lägga till din kod. Detta beror helt på dig. Du kan lägga till detta direkt i ditt tema functions.phpeller någonstans i dina plugin-filer. Jag gillar att arbeta med klasser som kommer att hålla ihop allt fint på ett ställe. För enkelhetens skull lägger jag till klassen en underkatalog /src/i mitt tema och inkluderar och instansierar den i functions.php.

require_once(get_stylesheet_directory().'/src/ChangePrices.php'); new ChangePrices();

Ändra detta steg för att passa ditt fall.

Steg 2: Bestäm hur prisjusteringarna ska fungera

Det här steget kanske redan är klart för dig – det är här du behöver veta hur och var du kan få prisjusteringen. Slutmålet ska vara ett tal som du adderar, subtraherar, multiplicerar eller dividerar priserna med.

I mitt fall har jag en användarmeta på varje användare som innehåller en procentuell rabatt; ett tal mellan 0 och 99. Webbplatsadministratören kan sätta en rabatt på varje användare. Jag kommer inte att visa koden för att lägga till användarmetafältet, eftersom detta kanske inte är för dig och det görs enkelt med t.ex. Advanced Custom Fields.

I min klass har jag en klassvariabel som i konstruktorn kommer att ställas till en multiplikator. Beroende på om en användare är inloggad hämtar jag den sparade rabatten från användaren och skapar en multiplikator från den. Som standard ska multiplikatorn vara 1. Pris 1 = samma pris som tidigare. Men för en rabatt på till exempel 10 % skulle multiplikatorn vara 0,9. Pris 0,9 = pris rabatterat med 10 %.

Nu när jag har en färdig att använda multiplikator, är det dags att undersöka faktiskt justera priser i WooCommerce.

Steg 3: Prisfilter i WooCommerce

I WooCommerce finns det ett filter för enkla, grupperade och externa produkttyper, och ett annat för variabla produkttyper. Jag rekommenderar att du lägger till båda filtren för att täcka alla produkttyper. Utöver detta arbetar WooCommerce med tre ytterligare prisfilter:

  • Ordinarie priser (woocommerce_product_get_regular_priceoch woocommerce_product_variation_get_regular_price)
  • Försäljningspriser (woocommerce_product_get_sale_priceoch woocommerce_product_variation_get_sale_price)
  • Det aktuella aktiva priset (woocommerce_product_get_priceoch woocommerce_product_variation_get_price). Det aktuella aktiva priset kommer att hämtas från antingen ordinarie pris eller reapris.

Nu kan du helt enkelt filtrera det aktuella aktiva priset och kalla det en dag, men det beror på hur du vill hantera visningen av priser i din webbshop. Kom ihåg att produkter på rea som standard visar det gamla priset (ordinarie pris) genomstruket och reapriset (aktivt pris) bredvid. Om du endast filtrerar x_get_priceoch en produkt är på rea, kommer det gamla priset att visas utan rabatt.

På grund av detta väljer jag att filtrera både det aktiva aktuella priset (x_get_price) och det ordinarie priset (x_get_regular_price), eftersom jag inte vill förvirra mina webbshopsanvändare.

Skriver prisfiltret

Alla fyra filtren kommer att hänvisa till samma funktion. Inuti funktionen multiplicerar vi helt enkelt det angivna priset med klassvariabeln. Kom ihåg att om ingen rabatt är satt är multiplikatorn 1 vilket resulterar i att priset inte ändras.

Observera att alla filter tillhandahåller produktobjektet som andra parameter. Om du ville justera priser beroende på produkter kan du justera koden för att göra det.

Om du kollar din webshop samtidigt som du är inloggad som användare med rabatt så ska du nu se rabatterade priser! Men vi är inte riktigt klara än. WooCommerce gjorde några ändringar i 2.4.7 (läs mer här) som påverkar dynamisk prissättning för rörliga produkter.

Hantera rörliga produktpriser

För att få dynamisk prissättning att fungera på variabla produkter bör du lägga till de filter som nämns i blogginlägget länkat ovan; woocommerce_variation_prices_price(och motsvarande ordinarie prisfilter woocommerce_variation_prices_regular_price), och filtret woocommerce_get_variation_prices_hash. Hashfiltret hanterar WooCommerces interna cache – och vi måste säga till WooCommerce att rensa det ordentligt när vi ändrar priserna med kod.

De två första prisfiltren följer samma procedur som adjustPrice(), men jag tilldelar dem en annan funktion eftersom parametrarna är olika. När det gäller hash-filterfunktionen måste vi lägga till hash-arrayen för att identifiera när cachen ska rensas. Att lägga till användar-ID är en bra idé eftersom multiplikatorn är unik för varje användare.

Äntligen borde det vara det!

Observera att du har tillgång till hela produktobjektet i alla filter (även variationsobjekt i de två sista). Detta är användbart i fall då du vill justera priser baserat på produktinformation; som att utesluta vissa produkter från rabatt, eller tillämpa en rabatt baserat på en produkts kategorier. Det borde vara ganska enkelt för dig att justera koden till vad du behöver för ditt fall.

Den fullständiga slutkoden

Som vanligt hoppas jag att du har lärt dig något genom att följa det här inlägget steg för steg, men jag ger hela klassen som referens:

Inspelningskälla: awhitepixel.com

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer