Как изменить или добавить ключ URL страницы благодарности в WooCommerce?

14 дек. 2016 г., 21:32:31
Просмотры: 17.4K
Голосов: 6

Я достаточно искал, но не нашел ответа на этот вопрос, хотя он может быть довольно простым.

В аналитике я хочу настроить цели для покупок, и у нас всего 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.

0
Все ответы на вопрос 1
4

Вы можете изменить 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
15 дек. 2016 г. 06:41:34
Комментарии

Уважаемый @Mohamed,

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

Что я могу делать не так? Не могли бы вы подсказать.

Dave Dave
21 дек. 2016 г. 01:16:32

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

который применяет фильтр "woocommerce_get_checkout_order_received_url" .

возможно, вам стоит попробовать подключить функцию переопределения к этому фильтру или проверить плагин шлюза, чтобы выяснить, какой хук он использует для получения URL возврата

Mohamed Ali Mohamed Ali
22 дек. 2016 г. 02:05:06

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

Огромное спасибо

Dave Dave
22 дек. 2016 г. 23:00:40

Рад, что это сработало для вас, я добавил этот фильтр в свой ответ :)

Mohamed Ali Mohamed Ali
24 дек. 2016 г. 13:01:38