Skip to content

Allt om WordPress, webbutveckling — och mer därtill

🏪 Anpassade WooCommerce-orderstatusar: hur man skapar och konfigurerar

🏪 Anpassade WooCommerce-orderstatusar: hur man skapar och konfigurerar

Vi behandlade ordern, men det finns ingen standardstatus för det här steget. "Processing" för montering, "Completed" för leverans, och ett tomrum däremellan. Butiken växer, och de sju förvalda WooCommerce-statusarna räcker inte längre.

Du kan lägga till en anpassad status på två sätt: med ett par rader kod i functions.php eller med ett färdigt plugin. Båda tillvägagångssätten fungerar och bryter inte mot den vanliga orderlogiken. Nedan går vi igenom steg för steg, med testad kod och ett alternativ utan programmering.

💡 Snabb översikt:

  • Vilka statusar som ingår i WooCommerce från början och varför de inte räcker till
  • Registrera en anpassad status via PHP-kod
  • Lägga till flera statusar och anpassade e-postaviseringar
  • Plugin för orderstatusar när kod inte är lämpligt
  • Svar på vanliga frågor: HPOS, färger, borttagning, översättning

Vilka statusar ingår i WooCommerce från början

Som standard har WooCommerce sju orderstatusar. Var och en är tätt knuten till en specifik punkt i livscykeln:

Status

Vad den betyder

Pending payment

Order skapad, betalning ej mottagen

Processing

Betalning mottagen, ordern behandlas

Completed

Ordern är slutförd och avslutad

On hold

Väntar på betalningsbekräftelse

Cancelled

Avbruten av kund eller administratör

Refunded

Pengar återbetalda

Failed

Betalningen misslyckades

För en typisk butik räcker den här uppsättningen. Men så fort anpassad hanteringslogik dyker upp, som beställningsproduktion eller leverans i flera steg, räcker inte sju statusar längre. Du behöver "Under montering", "Överlämnad till leverans", "Väntar på förskottsbetalning" eller "Kräver kontroll av chef".

Steg 1: registrera en anpassad status via kod

Före WooCommerce 3.0 använde statusar taxonomin shop_order_status, och att lägga till en ny var inte helt enkelt. Nu är det enklare: en orderstatus är en poststatus för den anpassade posttypen shop_order. Den registreras med en enda funktion, register_post_status(), och filtret wc_order_statuses.

Koden läggs till i barntemats functions.php. Innan du gör några ändringar, ta en fullständig säkerhetskopia av sajten.

1// Registering a new order status
2function sdstudio_register_custom_order_status() {
3 register_post_status( 'wc-preparing', array(
4 'label' => 'In assembly',
5 'public' => true,
6 'exclude_from_search' => false,
7 'show_in_admin_all_list' => true,
8 'show_in_admin_status_list' => true,
9 'label_count' => _n_noop(
10 'In assembly (%s)',
11 'In assembly (%s)',
12 'sdstudio'
13 ),
14 ) );
15}
16add_action( 'init', 'sdstudio_register_custom_order_status' );
17
18// Adding status to WooCommerce list
19function sdstudio_add_custom_order_status( $order_statuses ) {
20 $order_statuses['wc-preparing'] = 'In assembly';
21 return $order_statuses;
22}
23add_filter( 'wc_order_statuses', 'sdstudio_add_custom_order_status' );

När du har sparat functions.php kommer den nya statusen att visas i rullgardinsmenyn för orderstatus i adminpanelen och i WooCommerce-rapporter. Systemet ser den som en fullvärdig status, du kan filtrera ordrar, ändra status manuellt och använda den i hooks.

Vad som händer här

Funktionen register_post_status() skapar en ny poststatus med prefixet wc-, detta är en konvention i WooCommerce. Parametern label anger det läsbara namnet i adminpanelen. label_count, via _n_noop(), hanterar korrekt visning av räknare i det svenska gränssnittet.

Filtret wc_order_statuses lägger till statusen i den array som WooCommerce använder för att bygga listan. Utan det här steget kommer statusen att vara registrerad i systemet men inte visas i rullgardinsmenyn för ordrar.

Anpassad orderstatus i WooCommerces adminpanel

Visuellt ser resultatet ut precis så här, den nya statusen visas i den allmänna listan tillsammans med standardstatusarna.

Steg 2: lägga till flera statusar och e-postaviseringar

För en status fungerar koden ovan perfekt. Om du behöver flera, duplicera bara register_post_status() inuti samma funktion och lägg till en post i arrayen $order_statuses. Till exempel för en butik med beställningsproduktion:

1function sdstudio_register_multiple_statuses() {
2 // Status "In production"
3 register_post_status( 'wc-in-production', array(
4 'label' => 'In production',
5 'public' => true,
6 'exclude_from_search' => false,
7 'show_in_admin_all_list' => true,
8 'show_in_admin_status_list' => true,
9 'label_count' => _n_noop(
10 'In production (%s)',
11 'In production (%s)',
12 'sdstudio'
13 ),
14 ) );
15
16 // Status "Ready to ship"
17 register_post_status( 'wc-ready-to-ship', array(
18 'label' => 'Ready to ship',
19 'public' => true,
20 'exclude_from_search' => false,
21 'show_in_admin_all_list' => true,
22 'show_in_admin_status_list' => true,
23 'label_count' => _n_noop(
24 'Ready to ship (%s)',
25 'Ready to ship (%s)',
26 'sdstudio'
27 ),
28 ) );
29}
30add_action( 'init', 'sdstudio_register_multiple_statuses' );
31
32function sdstudio_add_multiple_statuses( $order_statuses ) {
33 $order_statuses['wc-in-production'] = 'In production';
34 $order_statuses['wc-ready-to-ship'] = 'Ready to ship';
35 return $order_statuses;
36}
37add_filter( 'wc_order_statuses', 'sdstudio_add_multiple_statuses' );

Observera: statusidentifieraren (det första argumentet i register_post_status) börjar alltid med wc-. Utan detta prefix kommer WooCommerce inte att fånga upp statusen.

E-postaviseringar för anpassade statusar

Som standard skickar WooCommerce inga e-postmeddelanden vid byte till en anpassad status. För att aktivera aviseringar, lägg till filtret woocommerce_email_actions:

1function sdstudio_add_custom_status_email( $email_actions ) {
2 $email_actions[] = 'woocommerce_order_status_wc-preparing';
3 $email_actions[] = 'woocommerce_order_status_wc-in-production';
4 return $email_actions;
5}
6add_filter( 'woocommerce_email_actions', 'sdstudio_add_custom_status_email' );

Efter detta kan du konfigurera e-postmallen i WooCommerce → Inställningar → E-post, den nya statusen visas i listan över utlösare för anpassning. Mallen skapas i barntemat på sökvägen woocommerce/emails/, filen namnges enligt mönstret customer-<status>.php.

Plugin för orderstatusar: när kod inte är lämpligt

Kod är inte den enda vägen. Om du inte vill redigera functions.php eller behöver ändra statusar ofta finns det plugin. Två huvudalternativ:

WooCommerce Order Status Manager, det officiella tillägget från WooCommerce. Lägger till ett gränssnitt för att skapa och redigera statusar direkt från adminpanelen: WooCommerce → Inställningar → Orderstatusar. Stöder e-postaviseringar, ikoner, färger och import/export av statusar. Betalversion, ingår i vissa WooCommerce-planer.

Flexi Custom Order Status, ett gratis plugin från WordPress.org-katalogen. Ger också en visuell redigerare för statusar, men med färre funktioner. Passar för grundläggande scenarier: lade till en status, tilldelade en färg, aktiverade ett e-postmeddelande.

Vilken väg du ska välja:

  • Du behöver en eller två statusar och är inte rädd för kod, functions.php räcker.
  • Det finns många statusar, de ändras ofta, eller sajten hanteras av en kund utan teknisk kunskap, skaffa ett plugin.
  • Du använder HPOS (High-Performance Order Storage), båda tillvägagångssätten fungerar. Statusar är fortfarande baserade på register_post_status(), HPOS påverkar dem inte.

Den korta videon ovan visar processen för att lägga till en anpassad status på fem minuter, från plugin-installation till första användning i ordrar.

⁉️🤔 Vanliga frågor

Fungerar anpassad status med HPOS?

Ja, fullständigt. HPOS ändrar hur orderdata lagras, men rör inte poststatus. Funktionen register_post_status() är fortfarande huvudmekanismen, din kod fungerar med HPOS både aktiverat och inaktiverat.

Kan man ange en färg för en anpassad status?

Via kod, endast med CSS-stilar i adminpanelen: haka på klassen .status-wc-preparing och sätt bakgrunden. Mer bekvämt via plugin: Order Status Manager och Flexi erbjuder visuellt färgval utan en enda rad kod.

Hur tar man bort en skapad status?

Ta bort den från register_post_status() och från filtret wc_order_statuses. Ordrar med denna status försvinner inte, de finns kvar i databasen, men statusen slutar visas i rullgardinslistan. Innan borttagning, flytta alla ordrar med den borttagbara statusen till en annan så att du inte tappar bort dem.

Hur översätter man statusar till ett annat språk?

Parametern label i register_post_status() tar en sträng, ange namnet på önskat språk. Om sajten är flerspråkig, slå in strängen i ett anrop till __() eller _x() med en textdomän, och översätt via .po/.mo-filer som vilken annan temattext som helst.

Är prefixet wc- obligatoriskt?

Ja. WooCommerce filtrerar statusar efter detta prefix. Om du registrerar en status utan wc- kommer den inte att visas i orderadminpanelen. Undantag, plugin: de lägger till prefixet själva eller kringgår filtreringen med interna mekanismer.

Kan man lägga till en anpassad status utan kod och utan plugin?

Utan kod och utan plugin, nej. WooCommerce tillhandahåller inget gränssnitt för att skapa statusar från början. Den minsta vägen utan programmering, gratis Flexi Custom Order Status från WordPress.org-katalogen. Installation med ett klick, konfiguration via adminpanelen.

Vad du ska använda för din uppgift

Anpassade orderstatusar är en av de WooCommerce-mekanismer som är lätta att hoppa över medan butiken är liten. Men så fort produktion, stegvis logistik eller manuell orderverifiering dyker upp, förvandlas adminpanelen utan dem till ett kaos av vaga anteckningar.

  • Du behöver en eller två statusar och har redigerat functions.php tidigare, koden från steg 1 löser uppgiften på fem minuter.
  • Du behöver en visuell redigerare och färginställningar för kunden, Flexi Custom Order Status (gratis).
  • Statusar är en del av en komplex affärsprocess med e-postscenarier och dussintals steg, WooCommerce Order Status Manager (officiellt tillägg).

Kolla vilket tillvägagångssätt som passar dig bäst och lägg till din första anpassade status idag. Om du använder en annan metod eller känner till ett plugin som inte finns med i artikeln, dela med dig i kommentarerna.