Modificarea sau adăugarea de conținut în URL-ul paginii de mulțumire WooCommerce

14 dec. 2016, 21:32:31
Vizualizări: 17.4K
Voturi: 6

Am căutat destul și nu am găsit un răspuns la această întrebare, dar poate fi ceva simplu.

În Analytics, vreau să configurez obiective pentru achiziții și avem doar 5 produse, astfel încât fiecare achiziție de produs ar trebui să fie un obiectiv separat.

Cea mai ușoară metodă de a seta un obiectiv de achiziție în Analytics este să furnizezi URL-ul paginii de mulțumire. În prezent, URL-ul paginii de mulțumire WooCommerce include detalii importante în URL, ca mai jos:

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

Așa arată paginile de mulțumire pentru plățile prin PayPal.

Dar când un utilizator efectuează o achiziție direct pe site cu gateway-uri precum 2checkout, moneris sau stripe, primesc un URL de tipul:

exampledomain.com/?key=wc_order_5849993d6ec72

După cum puteți vedea mai sus, acest URL nu conține mulți parametri pe care să-i pot folosi.

Întrebarea este: Cum pot edita aceste URL-uri pentru a include SKU-ul produsului?

În acest fel, va fi mai ușor pentru mine să filtrez pe baza SKU-ului.

0
Toate răspunsurile la întrebare 1
4

Puteți modifica URL-ul de returnare pe care WooCommerce îl furnizează gateway-urilor folosind filtrul:

woocommerce_get_return_url

Unele plugin-uri pentru gateway-uri folosesc o metodă diferită pentru a obține URL-ul de returnare, invocând $order->get_checkout_order_received_url(), care aplică filtrul:

woocommerce_get_checkout_order_received_url

Un exemplu ar putea arăta astfel:

add_filter('woocommerce_get_return_url','override_return_url',10,2);

function override_return_url($return_url,$order){

    //creăm un array gol pentru a stoca parametrii URL
    $sku_list = array();

    // preluăm produsele din comandă
    foreach($order->get_items() as $key => $item)
    {
      $product = wc_get_product($item['product_id']);
      //obținem SKU-ul fiecărui produs și îl introducem în array
      $sku_list['product_'.$item['product_id'] . 'sku'] = $product->get_sku();
    }
    //construim șiruri de interogare din array-ul de SKU-uri
    $url_extension = http_build_query($sku_list);
    //adăugăm șirurile noastre la URL-ul original
    $modified_url = $return_url.'&'.$url_extension;

    return $modified_url;

  }

URL-ul rezultat va arăta astfel:

http://example.com/index.php/checkout/order-received/161/?key=wc_order_585214b2abb65&product_8=SKU1&product_45=SKU2
15 dec. 2016 06:41:34
Comentarii

Dragă @Mohamed,

Mulțumesc foarte mult, când am citit codul tău, logica pare bună, dar când am încercat, nu s-a schimbat nimic la URL-ul de returnare. De asemenea, NU a apărut nicio eroare când am făcut o comandă de test.

Ce aș putea face greșit? Poți să-mi spui, te rog.

Dave Dave
21 dec. 2016 01:16:32

@Dave Am văzut că unele plugin-uri de gateway folosesc o metodă diferită pentru a obține URL-ul de returnare prin invocarea $order->get_checkout_order_received_url() ;

care aplică filtrul "woocommerce_get_checkout_order_received_url".

poate ar trebui să încerci să atașezi funcția de suprascriere la acest filtru în loc, sau să verifici plugin-ul de gateway pentru a afla care filtru folosește pentru a obține URL-ul de returnare

Mohamed Ali Mohamed Ali
22 dec. 2016 02:05:06

Poți să actualizezi și acest filtru în Răspunsul tău, astfel încât și alții să-l poată găsi.

Mulțumesc foarte mult

Dave Dave
22 dec. 2016 23:00:40

Mă bucur că a funcționat pentru tine, am adăugat acel filtru în răspunsul meu :)

Mohamed Ali Mohamed Ali
24 dec. 2016 13:01:38