Cómo cambiar o añadir contenido a la URL clave de la página de agradecimiento en Woocommerce
He buscado bastante y no encontré una respuesta para esta pregunta, aunque quizás sea algo sencillo.
En Analytics, quiero configurar objetivos para las compras y solo tenemos 5 productos, por lo que cada compra de producto debería ser un objetivo separado.
La forma más fácil de configurar un objetivo de compra en Analytics es proporcionar la URL de agradecimiento. Actualmente, la URL de agradecimiento de Woocommerce incluye detalles importantes como se muestra a continuación:
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
Así es como se muestran las páginas de agradecimiento de pago con PayPal.
Pero cuando un usuario realiza una compra directamente en el sitio con pasarelas como 2checkout, moneris o stripe, obtengo este tipo de URL:
exampledomain.com/?key=wc_order_5849993d6ec72
Como puedes ver arriba, esta URL no contiene muchos parámetros para poder utilizar.
La pregunta es: ¿Cómo puedo editar estas URLs para incluir el SKU del producto?
De esta manera, me será más fácil filtrar basado en el SKU.

Puedes editar la URL de retorno que WooCommerce proporciona a las pasarelas de pago utilizando el filtro:
woocommerce_get_return_url
Algunos plugins de pasarela usan un método diferente para obtener la URL de retorno invocando $order->get_checkout_order_received_url(); el cual aplica el filtro:
woocommerce_get_checkout_order_received_url
Un ejemplo sería:
add_filter('woocommerce_get_return_url','override_return_url',10,2);
function override_return_url($return_url,$order){
//crear un array vacío para almacenar los parámetros de la URL
$sku_list = array();
// recuperar productos en el pedido
foreach($order->get_items() as $key => $item)
{
$product = wc_get_product($item['product_id']);
//obtener el SKU de cada producto e insertarlo en el array
$sku_list['product_'.$item['product_id'] . 'sku'] = $product->get_sku();
}
//construir cadenas de consulta a partir del array de SKUs
$url_extension = http_build_query($sku_list);
//añadir nuestras cadenas a la URL original
$modified_url = $return_url.'&'.$url_extension;
return $modified_url;
}
La URL resultante será algo como:
http://example.com/index.php/checkout/order-received/161/?key=wc_order_585214b2abb65&product_8=SKU1&product_45=SKU2

Estimado @Mohamed,
Muchas gracias, cuando revisé tu código, la lógica parece correcta pero al probarlo, no hay cambios en la URL de retorno. Además, NO hay ningún error cuando hice una orden de prueba.
¿Qué podría estar haciendo mal? ¿Podrías indicármelo por favor?

@Dave He visto que algunos plugins de pasarela de pago usan un método diferente para obtener la URL de retorno invocando: $order->get_checkout_order_received_url();
que aplica el filtro: "woocommerce_get_checkout_order_received_url".
Quizás deberías intentar enlazar tu función de sobrescritura a este filtro, o revisar el plugin de pasarela para ver qué hook utiliza para obtener la URL de retorno

¿Podrías actualizar también este filtro en tu Respuesta para que otros también puedan encontrarlo?
Muchas gracias
