Come modificare o aggiungere il contenuto della chiave URL nella pagina di ringraziamento di Woocommerce?
Ho cercato abbastanza ma non ho trovato una risposta a questa domanda che forse è più semplice di quanto sembri.
In Analytics, voglio impostare obiettivi per gli acquisti e abbiamo solo 5 prodotti, quindi ogni acquisto di prodotto dovrebbe essere un obiettivo separato.
Il modo più semplice per impostare un obiettivo di acquisto in Analytics è fornire l'URL della pagina di ringraziamento. Attualmente, l'URL di ringraziamento di Woocommerce include dettagli importanti come mostrato di seguito.
exampledomain.com/?key=wc_order_584a9caad78bc&amt=239.00&cc=USD&charset=windows-1252&cm={"order_id":13586,"order_key":"wc_order_584a9caad78bc"}&st=Completed&tx=2AF5736382483492L
Questo è come vengono mostrate le pagine di ringraziamento per i pagamenti Paypal.
Ma quando un utente effettua un acquisto direttamente sul sito con gateway come 2checkout, moneris o stripe, ottengo un URL di questo tipo:
exampledomain.com/?key=wc_order_5849993d6ec72
Come puoi vedere sopra, questo URL non contiene molti parametri utili per il mio scopo.
La domanda è: come posso modificare questi URL per includere lo SKU del prodotto?
In questo modo, sarà più facile per me filtrare in base allo SKU.

Puoi modificare l'URL di ritorno fornito da WooCommerce ai gateway utilizzando il filtro
woocommerce_get_return_url
Alcuni plugin di gateway utilizzano un metodo diverso per ottenere l'URL di ritorno richiamando $order->get_checkout_order_received_url(); che applica il filtro
woocommerce_get_checkout_order_received_url
Un esempio potrebbe essere:
add_filter('woocommerce_get_return_url','override_return_url',10,2);
function override_return_url($return_url,$order){
//crea un array vuoto per memorizzare i parametri dell'URL
$sku_list = array();
// recupera i prodotti nell'ordine
foreach($order->get_items() as $key => $item)
{
$product = wc_get_product($item['product_id']);
//ottieni lo SKU di ogni prodotto e inseriscilo nell'array
$sku_list['product_'.$item['product_id'] . 'sku'] = $product->get_sku();
}
//costruisci le query string dall'array degli SKU
$url_extension = http_build_query($sku_list);
//aggiungi le nostre stringhe all'URL originale
$modified_url = $return_url.'&'.$url_extension;
return $modified_url;
}
L'URL risultante sarà simile a
http://example.com/index.php/checkout/order-received/161/?key=wc_order_585214b2abb65&product_8=SKU1&product_45=SKU2

Caro @Mohamed,
Grazie mille, quando ho letto il tuo codice, la logica sembra essere buona ma quando ho provato, non c'è alcun cambiamento nell'URL di ritorno. Inoltre, NON ci sono errori quando ho fatto un ordine di test.
Cosa potrei sbagliare? Puoi dirmelo, per favore.

@Dave Ho visto che alcuni plugin di gateway utilizzano un metodo diverso per ottenere l'URL di ritorno invocando $order->get_checkout_order_received_url() ;
che applica il filtro "woocommerce_get_checkout_order_received_url" .
forse dovresti provare ad agganciare la funzione di override a questo filtro invece, o controllare il plugin del gateway per scoprire quale hook utilizza per ottenere l'URL di ritorno

Potresti per favore aggiornare anche questo filtro nella tua Risposta in modo che anche altri possano trovarlo.
Grazie mille
