Cómo cambiar o añadir contenido a la URL clave de la página de agradecimiento en Woocommerce

14 dic 2016, 21:32:31
Vistas: 17.4K
Votos: 6

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.

0
Todas las respuestas a la pregunta 1
4

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
15 dic 2016 06:41:34
Comentarios

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 Dave
21 dic 2016 01:16:32

@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

Mohamed Ali Mohamed Ali
22 dic 2016 02:05:06

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

Muchas gracias

Dave Dave
22 dic 2016 23:00:40

Me alegro de que te haya funcionado, he añadido ese filtro a mi respuesta :)

Mohamed Ali Mohamed Ali
24 dic 2016 13:01:38