Modificarea sau adăugarea de conținut în URL-ul paginii de mulțumire WooCommerce
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.

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

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 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

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
