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.
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_1ab2cd3ef4g
que 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.
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