Obtener Ver URL de pedido para correo electrónico personalizado en WooCommerce

4 minutos de lectura

quiero conseguir el URL de la página Detalles del pedido desde donde el usuario puede ver los detalles de su pedido, porque al usar una API de terceros, envío un correo al cliente después de que se envía el producto.

Probé este código

$order = wc_get_order(109);
$public_view_order_url = esc_url( $order->get_view_order_url() );
echo $public_view_order_url; //http://example.com/my-account/view-order/109/

pero la URL generada por ^^ código anterior solo funciona para el cliente que ha iniciado sesión. ¿Es posible obtener un URL pública para que el usuario no tenga que iniciar sesión porque la mayoría de los clientes no tienen ninguna cuenta. Sé que por razones de seguridad se necesita una identificación de correo electrónico y un número de factura.

Una solución que creo es creando un pagina personalizada que aceptará order_id, order_key y email_id en el parámetro GET y consultarlo y mostrar el resultado; todo lo que tengo que crear, pero ¿hay alguna función/gancho de WooCommerce para esto?

Lo busqué en Google y también pasé tiempo en Woo doc pero el resultado fue negativo,

Cualquier ayuda o sugerencia será muy útil para mí.

Gracias.

  • Creo que esto no es realmente posible en WooCommerce tal como es, porque cuando un usuario no registrado realiza un pedido, esto se maneja mediante sesiones temporales y cookies. Por lo tanto, no es posible mostrar un pedido después en modo público. Es por eso que tiene una página “Mi cuenta” con todos los pedidos relacionados con un cliente registrado. Pero todo es posible con WooCommerce, desarrollando un plugin personalizado para tal fin.

    – LoicTheAztec

    5 de diciembre de 2016 a las 12:39

  • @LoicTheAztec: No sabía eso, así que publiqué esta pregunta, y sí, también puedo crear personalizados, por pagina personalizada.

    – Rana Ghosh

    7 de diciembre de 2016 a las 6:52

  • Usar $order->get_checkout_order_received_url() función. Funciona para usuarios no registrados también

    – pliashkou

    18 de marzo a las 8:02

No estoy seguro si me estoy perdiendo algo, pero es sonidos como lo que quieres se puede lograr con el Order Received URL:

$order->get_checkout_order_received_url()

Esto te daría algo como https://example.com/checkout/order-received/12345/?key=wc_order_1ab2cd3ef4gque es un enlace directo al recibo del pedido que se muestra después de un pedido procesado con éxito.

Este enlace mostrará los detalles de facturación y envío, los detalles del pedido y el método de pago de forma predeterminada, y no requiere que el cliente tenga una cuenta o que inicie sesión.

No pude encontrar una manera de hacerlo, así que solo puse una condición en mi correo electrónico. Si tienen una cuenta, vincúlela al pedido, si no, anímelos a crear una cuenta para el próximo pedido.

<p><?php
$email_order_url    =$order->get_view_order_url();

if ( $order->get_user() ) {
    _e( "Your message with <a href="" . $email_order_number . "">Order 
       Number'</a>.", 'woocommerce' );
    } else {
    _e( "Message to encourage them to create an account on the regular 
       accounts page" , 'woocommerce' );
}

Todo lo que necesita está en la publicación meta, esto funciona para mí cuando está en un ciclo al que puede acceder get_the_ID():

<?php $the_order_id  = get_the_ID();
      $the_order_key = get_post_meta($the_order_id, '_order_key', true); ?>

https://yoursiteurl.com/checkout/order-pay/<?php echo the_order_id; ?>/?pay_for_order=true&key=<?php echo $the_order_key; ?>

De lo contrario, si se puede reemplazar get_the_ID() con el ID de pedido de alguna otra manera (sin embargo, obtendrá 109 en su pregunta inicial), eso también funcionaría.

  • Es posible que desee utilizar /order-received en vez de /order-pay. Si el pedido ya está pagado, el usuario no obtendrá un error.

    – Marcello B.

    24 de mayo de 2020 a las 3:58

  • Quemar enlaces no es una buena práctica, por eso woocommerce tiene $order->get_checkout_order_received_url() para que pueda obtener la página de pedido recibido de forma dinámica a pesar de la dirección de dominio actual.

    – svelandiag

    2 de julio de 2020 a las 19:45


  • ¿Te importa ampliar sobre por qué eso no sería una buena práctica @svelandiag? Y lo que significa “quemar enlaces”. Nunca escuché eso antes.

    – Nathan

    6 de julio de 2020 a las 23:08

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad