Come modificare o aggiungere il contenuto della chiave URL nella pagina di ringraziamento di Woocommerce?

14 dic 2016, 21:32:31
Visualizzazioni: 17.4K
Voti: 6

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.

0
Tutte le risposte alla domanda 1
4

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
15 dic 2016 06:41:34
Commenti

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 Dave
21 dic 2016 01:16:32

@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

Mohamed Ali Mohamed Ali
22 dic 2016 02:05:06

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

Grazie mille

Dave Dave
22 dic 2016 23:00:40

Contento che abbia funzionato per te, ho aggiunto quel filtro alla mia risposta :)

Mohamed Ali Mohamed Ali
24 dic 2016 13:01:38