Woocommerce - schimbarea statusului comenzii din on-hold în pending payment

1 mar. 2017, 14:43:36
Vizualizări: 33.7K
Voturi: 0

Încerc să automatizez schimbarea statusului comenzii din "on-hold" în "pending payment" odată ce un vânzător a marcat comanda ca fiind completată. În prezent, statusul implicit este "on-hold" când o comandă este creată, iar plata trebuie solicitată doar după ce produsul este livrat. Este posibil să actualizez statusul în "pending" după ce o anumită acțiune a fost efectuată?

0
Toate răspunsurile la întrebare 4
0

Dacă ai nevoie să schimbi starea comenzii din PHP, iată cum poți face acest lucru.

$order = new WC_Order($order_id);

if (!empty($order)) {
 $order->update_status( 'completed' );
}

Valori posibile: processing, on-hold, cancelled, completed

Această informație provine din woocommerce/includes/abstracts/abstract-wc-order.php

3 iul. 2017 13:07:01
1

un pic întârziat, dar totuși greu de găsit...

Valori posibile

Bazat pe https://www.bozzmedia.com/posts/get-know-woocommerce-status-definitions/

"processing (în procesare), on-hold (în așteptare), cancelled (anulat), completed (finalizat), pending (în așteptare), failed (eșuat), refunded (rambursat)"

și acestea sunt susținute în clasa WooCommerce Order..
/woocommerce/includes/class-wc-order.php - În jurul liniei 108 sau pe acolo.

Presupunând că nu folosești un plugin capabil să adauge mai multe.

29 mai 2018 06:08:03
Comentarii

cum răspunde la întrebare?

Mark Kaplun Mark Kaplun
29 mai 2018 07:45:32
0

Aceasta va funcționa:

add_filter( 'woocommerce_bacs_process_payment_order_status', function( $status = 'on_hold', $order = null ) {
return 'pending';
}, 10, 2 );

DAR dacă o folosiți, schimbarea stării poate determina ca email-urile să nu fie trimise după ce o comandă este primită, deoarece trece prea repede din 'on hold' în 'pending', iar WooCommerce nu trimite email-uri în starea 'pending'. Am testat acest lucru și după câteva zile email-urile nu mai erau trimise, deși inițial a funcționat.

3 oct. 2021 22:34:55
8
-1

Da, pur și simplu adaugi acest cod atunci când vrei să schimbi starea și adaugi în interiorul acestei funcții.

   add_action('woocommerce_order_status_changed','status_changed_processsing');
   function status_changed_processsing( $order_id, $checkout = null ) {
       global $woocommerce;
       $order = new WC_Order( $order_id );
       if(condiția ta aici){

           //atribuie starea comenzii
           $order->status = 'pending';
        }
   }
1 mar. 2017 14:53:46
Comentarii

Bună sonalip3, mulțumesc pentru răspuns! Am adăugat condițiile mele, dar codul încă nu funcționează... add_action('woocommerce_order_status_changed','status_changed_processsing'); function status_changed_processsing( $order_id, $checkout = null ) { global $woocommerce; $order = new WC_Order( $order_id );
if( $order->status == 'on-hold' && $order->fulfillment_status == 'fulfilled' ){

       //atribuie statusul comenzii
       $order->status = 'pending';
    }

}

Gill Gill
1 mar. 2017 15:27:17

Intră în condiția if, ai verificat?

Sonali Sonali
2 mar. 2017 06:44:17

Am testat folosind doar condiția de status 'on-hold' și funcționează dacă schimb atribuirea statusului comenzii cu: $order->update_status('pending'). Pot să te întreb, am nevoie să obțin fulfillment_status din tabela woocommerce_order_itemmeta, știi cum pot face asta folosind același order_id?

Gill Gill
2 mar. 2017 10:27:41

Nu știu ce plugin folosești pentru 'fulfillment_status', așa că încearcă să afișezi $order și verifică obiectul comenzii. Cel mai probabil, $order conține acel fulfillment_status. Adaugă asta înainte de condiție: echo '<pre>';print_r($order);exit; . Încearcă și vei vedea obiectul comenzii.

Sonali Sonali
2 mar. 2017 10:54:15

Pluginul este Woocommerce product vendor plugin, de unde provine fulfillment_status. Cum pot vedea unde sunt rezultatele afișării pentru a obține obiectul comenzii?

Gill Gill
2 mar. 2017 11:42:30

Este un plugin plătit, nu? Nu îl am. Așa că adaugă această linie: echo '<pre>';print_r($order);exit; după această linie: $order = new WC_Order( $order_id ); și verifică prin actualizarea statusului. Acesta este obiectul unde ar trebui să fie adăugat 'fulfillment_status'.

Sonali Sonali
2 mar. 2017 12:16:39

Da, este un plugin plătit. Am adăugat acest cod, dar nu văd nimic când îl rulez. Cum sau unde pot vedea rezultatele print_r echo?

Gill Gill
2 mar. 2017 13:39:10

Ai verificat în baza de date dacă ID-ul comenzii tale are 'fulfillment_status' în tabelul woocommerce_order_itemmeta?... Deoarece tabelul woocommerce_order_itemmeta salvează datele elementelor comenzii, nu acea comandă specifică.

Sonali Sonali
3 mar. 2017 07:44:22
Arată celelalte 3 comentarii