Как изменить или добавить ключ URL страницы благодарности в WooCommerce?
Я достаточно искал, но не нашел ответа на этот вопрос, хотя он может быть довольно простым.
В аналитике я хочу настроить цели для покупок, и у нас всего 5 товаров, поэтому покупка каждого товара должна быть отдельной целью.
Самый простой способ настроить цель покупки в Analytics - это указать URL страницы благодарности. В WooCommerce URL страницы благодарности содержит важные данные, как показано ниже.
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
Так выглядят страницы благодарности после оплаты через PayPal.
Но когда пользователь совершает покупку напрямую на сайте с использованием платежных шлюзов, таких как 2checkout, moneris, stripe, я получаю URL следующего типа.
exampledomain.com/?key=wc_order_5849993d6ec72
Как видно выше, этот URL не содержит многих параметров, которые я мог бы использовать.
Вопрос: как изменить эти URL, чтобы включить в них SKU товара?
Таким образом, мне будет проще фильтровать данные по SKU.

Вы можете изменить URL возврата, который WooCommerce предоставляет шлюзам оплаты, используя фильтр
woocommerce_get_return_url
Некоторые плагины шлюзов используют другой метод для получения URL возврата, вызывая $order->get_checkout_order_received_url(); который применяет фильтр
woocommerce_get_checkout_order_received_url
Пример может выглядеть так:
add_filter('woocommerce_get_return_url','override_return_url',10,2);
function override_return_url($return_url,$order){
//создаем пустой массив для хранения параметров URL
$sku_list = array();
// получаем товары в заказе
foreach($order->get_items() as $key => $item)
{
$product = wc_get_product($item['product_id']);
//получаем SKU каждого товара и добавляем в массив
$sku_list['product_'.$item['product_id'] . 'sku'] = $product->get_sku();
}
//строим строку запроса из массива SKU
$url_extension = http_build_query($sku_list);
//добавляем нашу строку к оригинальному URL
$modified_url = $return_url.'&'.$url_extension;
return $modified_url;
}
Итоговый URL будет выглядеть примерно так
http://example.com/index.php/checkout/order-received/161/?key=wc_order_585214b2abb65&product_8=SKU1&product_45=SKU2

Уважаемый @Mohamed,
Большое спасибо, когда я читаю ваш код, логика кажется правильной, но когда я попробовал его, URL возврата не изменился. Также НЕТ ошибки при тестовом заказе.
Что я могу делать не так? Не могли бы вы подсказать.

@Dave Я видел, что некоторые плагины платежных шлюзов используют другой метод для получения URL возврата, вызывая $order->get_checkout_order_received_url() ;
который применяет фильтр "woocommerce_get_checkout_order_received_url" .
возможно, вам стоит попробовать подключить функцию переопределения к этому фильтру или проверить плагин шлюза, чтобы выяснить, какой хук он использует для получения URL возврата

Не могли бы вы также обновить этот фильтр в вашем Ответе, чтобы другие тоже могли его найти.
Огромное спасибо
