Un utente ha chiesto informazioni su WooCommerce di Wordpress

Sto cercando un gancio di pagamento in sospeso

Un utente ha chiesto 👇

Uno dei nostri clienti desidera sincronizzare i suoi ordini con i libri rapidi quando viene creato un ordine per lo stato di pagamento in sospeso, un altro stato funziona perfettamente.

Ho provato questi ganci:
add_action (‘woocommerce_order_status_pending’, ‘order_sync’);
add_action (‘woocommerce_new_order’, ‘create_invoice_for_wc_order’, 1, 1);

Ma nessuno di loro sembra funzionare, fornire una soluzione il prima possibile

Di,
Vishal

Supporto per plugin

(@riaanknoetze)

1 anno, 5 mesi fa

Ciao,

Come sincronizzi gli altri stati degli ordini? È con codice personalizzato o stai utilizzando un plug-in Quickbooks dedicato per questo?

Lanciatore di thread

(@vishalb)

1 anno, 5 mesi fa

abbiamo creato un plugin con Quickbooks api, tutti gli altri stati funzionano bene, ma lo stato di pagamento in sospeso non si sincronizza automaticamente.

Abbiamo collegato una modifica dello stato del comando che funziona bene, ma inizialmente quando lo stato dell’ordine è in sospeso, l’ordine non si sincronizza.

Puoi farci sapere quale hook possiamo usare, ne abbiamo urgente bisogno.
Apprezzeremo qualsiasi aiuto.

Supporto per plugin

(@madeincosmos)

Ingegnere automatizzato della felicità

1 anno, 5 mesi fa

Ciao @vishalb,

Grazie per la tua spiegazione! Capisco quello che vuoi dire. woocommerce_new_order Viene rilasciato solo per i comandi creati al momento del pagamento, quindi se il comando sta creando il comando manualmente in WP Admin, questo hook non verrà mai rilasciato da quel comando.

Un modo per risolvere questo problema è collegarsi woocommerce_after_order_object_save persino alimentato per comandi creati manualmente, come:


add_action( 'woocommerce_after_order_object_save', 'custom_export_pending_order_data', 10, 2 );

function custom_export_pending_order_data( $order_id, $data_store ) {
	$order = wc_get_order( $order_id );
	if( 'pending' === $order->get_status() ) {
		//add your code here

	}		
}

Nota, tuttavia, che questo hook viene attivato ripetutamente ad ogni aggiornamento di un ordine, quindi probabilmente avrai bisogno di un flag per indicare se l’ordine è già stato elaborato o meno.

Spero possa aiutare!

Lanciatore di thread

(@vishalb)

1 anno, 5 mesi fa

Abbiamo provato quel gancio ma non funziona 🙁

Questo hook è supportato da 3.0 V.

All’inizio quando viene creato un ordine sembra non funzionare, ma quando lo facciamo manualmente, puoi suggerirmi qualcos’altro?

Lanciatore di thread

(@vishalb)

1 anno, 5 mesi fa

Ecco il mio gancio:
add_action (‘woocommerce_after_order_object_save’, ‘custom_export_pending_order_data’, 10, 1);

e questa è la mia funzione:

function custom_export_pending_order_data ($ order_id) {
$ order = wc_get_order ($ order_id);

if (‘in attesa’ === $ command-> get_status ()) {

$ order_ids[0] = $ order_id;
$ this-> ExportOrder-> push_to_queue ($ order_ids);
$ this-> ExportOrder-> save () -> address ();

}
}

Sto commettendo errori? Ti preghiamo di rispondere il prima possibile da parte nostra

Lanciatore di thread

(@vishalb)

1 anno, 5 mesi fa

hey @madeincosmos @riaanknoetze Per favore rispondi, abbiamo bisogno di una soluzione al più presto

Supporto per plugin

(@mikkamp)

Ingegnere automatizzato della felicità

1 anno, 5 mesi fa

Ciao,

Dovresti essere in grado di utilizzare l’hook “woocommerce_new_order” o “woocommerce_after_order_object_save”

L’hook “woocommerce_after_order_object_save” cattura un esempio dell’oggetto. Quindi in quel caso sarà un oggetto “WC_Order $ order” e non l’ID del comando. Ciò eliminerebbe la necessità di una chiamata aggiuntiva a “wc_get_order”. Ma non spiega perché fallisce.

Hai detto che funziona quando crei un ordine manualmente ma non al momento del pagamento. Hai confermato di aver avviato una sessione di pagamento completamente nuova? Altrimenti, se l’ordine è già stato creato, WooCommerce proverà a utilizzare un ordine esistente al momento del pagamento.
Consiglierei anche di provare con un gateway di pagamento diverso poiché il modo in cui viene creato l’ordine iniziale al momento del pagamento può essere ignorato.

Puoi aggiungere alcune registrazioni all’hook che stai utilizzando in modo da poter confermare che stai controllando i dettagli corretti e vedere qual è lo stato effettivo dell’ordine nel momento in cui il tuo Hook viene chiamato. I seguenti suggerimenti possono quindi essere utili: https://nickgreen.info/logging-errors-in-woocommerce/

Lanciatore di thread

(@vishalb)

1 anno, 5 mesi fa

Manualmente intendevo quando modifico manualmente lo stato dell’ordine da in elaborazione a operazione in sospeso, quando viene creato per la prima volta un ordine con stato in sospeso, non funziona.

Hai qualche soluzione per questo?

Supporto per plugin

(@mikkamp)

Ingegnere automatizzato della felicità

1 anno, 5 mesi fa

Ciao,

Entrambi questi hook funzionano sul mio sito di prova, solo una semplice copia di WooCommerce. Quindi, se non funziona per te, ti suggerisco di dare un’occhiata più da vicino a un test di test dei conflitti: https://docs.woocommerce.com/document/how-to-test-for-conflicts/

In alternativa, aggiungi un po ‘di registrazione alla tua funzione, in modo da poter determinare se il comando e lo stato del comando sono effettivamente come ti aspetti.

Lanciatore di thread

(@vishalb)

1 anno, 5 mesi fa

abbraccio michael,

puoi per favore fornire un esempio di come usare questo hook con una funzione:
woocommerce_after_order_object_save
Questo potrebbe aiutarci di più

Se non utilizzo “wc_get_order”, come posso confrontare lo stato.

$ order = wc_get_order ($ order_id);

if (‘in attesa’ === $ command-> get_status ()) {
// codice
}

Di,
Vishal

Supporto per plugin

(@mikkamp)

Ingegnere automatizzato della felicità

1 anno, 5 mesi fa

Ciao Vishal,

L’hook cattura un oggetto comando quindi non è necessario utilizzare wc_get_order per recuperare un oggetto comando. Ecco un esempio di codice che funziona senza domande sul mio sito:

add_action( 'woocommerce_after_order_object_save', 'custom_export_pending_order_data' );
function custom_export_pending_order_data( $order ) {
	$logger = wc_get_logger();
	ob_start();
	var_dump( $order->get_id(), $order->get_status() );
	$logger->debug( ob_get_clean(), array( 'source' => 'log-order-data' ) );

	if ( 'pending' === $order->get_status() ) {
		// Do something here.
	}
}

Le prime righe della funzione sono solo un login per confermare che stiamo ottenendo i dati che ci aspettiamo. Puoi visualizzare questi file di registro in WooCommerce> Stato> Registri.
La dichiarazione mostra se sei in grado di confrontare lo stato dell’ordine.

Lanciatore di thread

(@vishalb)

1 anno, 5 mesi fa

Grazie !!
Non ho lavorato prima ma ha un ciclo che viene eseguito più e più volte, lo controlleremo comunque.

Grazie per la tua risposta 🙂

Di,
Vishal

Was this helpful?

0 / 0

Lascia un commento 0

Your email address will not be published. Required fields are marked *