Redirigir después de la compra en WooCommerce

¡Buenas! En este vídeo vemos cómo redirigir a un usuario a una página personalizada después de que haga una compra en WooCommerce. ¡Vamos allá!

YouTube video

Por defecto, cuando finalizamos una compra en WooCommerce nos aparece algo así:

Ya sea por estética o por necesidades de nuestro negocio, nos puede interesar cambiar esa página que sale al final de la compra por otra más más bonita, personalizada, o que contenga el siguiente paso que queremos que realice el usuario.

Veremos diferentes escenarios que podemos tener para hacer esa redirección después de la compra.

Sea cual sea el escenario, la primera parte siempre es la misma:

  1. Acceder a la raíz de nuestra web por FTP
  2. Abrir el carpeta del tema activo en wp-content/themes
  3. Abrir el archivo functions.php
  4. Insertar el snippet correspondiente al final del archivo

A partir de ahí, dependiendo de lo que necesites puedes usar un código u otro.

Redirigir todas las compras a otra página

Este código va a redirigir absolutamente todas las compras de WooCommerce a una página personalizada.

add_action( 'woocommerce_thankyou', function ($order_id) {
	$order = wc_get_order( $order_id );
	$url = 'https://academia.local/gracias/';
	if ( ! $order->has_status( 'failed' ) ) {
		wp_safe_redirect( $url );
		exit;
	}
});

Solo tendrás que personalizar esta parte de aquí, cambiando la URL por la tuya propia:

$url = 'https://academia.local/gracias/';

Redirigir solo una o varias categorias concretas

Puede que necesites redirigir solo una categoría o varias categorías concretas a esa página personalizada y que el resto de productos vayan a la página por defecto. Para eso, usa este código:

add_action( 'woocommerce_thankyou', function ($order_id) {
    $order = wc_get_order( $order_id );
    $in_order = false;
    $url = 'https://academia.local/gracias/';
    $cats = array('hoodies');

	foreach ($order->get_items() as $product) {
		if (has_term($cats, 'product_cat', $product->get_product_id())) {
			$in_order = true;
		} break;
	}
	if ( ! $order->has_status( 'failed' )) {
		if ($in_order) {
			wp_safe_redirect($url );
		exit;
		}
	}
});

En este caso tienes que personalizar la URL:

$url = 'https://academia.local/gracias/';

Y también las categorías que quieres que se redirigan:

$cats = array('hoodies');

Se trata de insertar en el array el slug de las categorías que quieres redirigir. Puedes conseguir el slug en Productos > Categorías

Verás el slug en la columna correspondiente de cada categoría:

Si solo es una categoría, simplemente cambia hoodies por el slug de tu categoría. Si vas a redirigir varias categorías, tienes que separarlas con una coma, tal que así:

$cats = array('hoodies', 'decor', 'music');

El resto de código lo puedes dejar tal como está 🙂

Redirigir solo productos concretos

Ahora lo mismo pero con los productos:

add_action( 'woocommerce_thankyou', function ($order_id) {
    $order = wc_get_order( $order_id );
    $in_order = false;
    $url = 'https://academia.local/gracias/';
    $products = array(23, 24, 25);

	foreach ($order->get_items() as $product) {
		if (in_array($product->get_product_id(), $products)) {
			$in_order = true;
		} break;
	}
	if ( ! $order->has_status( 'failed' )) {
		if ($in_order) {
			wp_safe_redirect($url );
		exit;
		}
	}
});

En este caso, aparte de la URL, tienes que indicar los IDs de los productos que quieres redirigir, en esta línea de aquí:

$products = array(23, 24, 25);

Hay varias formas de averiguar el ID de un producto. La más sencilla es esta:

  1. Ir a Productos > Todos los productos
  2. Poner el cursor sobre el producto que te interesa
  3. El ID aparecerá justo debajo del título

Dar una alternativa a la redirección

Te doy otra opción más. Imagínate que quieres redirigir algunos productos a una página personalizada, pero el resto no los quieres dejar por defecto, sino redirigir a otra página personalizada. Es decir, tendremos que indicar dos URLs y no una. Lo haremos así:

add_action( 'woocommerce_thankyou', function ($order_id) {
	$order = wc_get_order( $order_id );
	$in_order = false;
        $products = array(23, 24, 25);

	foreach ($order->get_items() as $product) {
		if (in_array($product->get_product_id(), $products)) {
			$in_order = true;
		} break;
	}
	if ( ! $order->has_status( 'failed' )) {
		if ($in_order) {
		     wp_safe_redirect('https://academia.local/test');
		     exit;
		} else {
		     wp_safe_redirect('https://academia.local/test-2');
                     exit;
		}
	}
});

Ahora simplemente se trataría de personalizar el array de productos, igual que antes:

$products = array(23, 24, 25);

Y también la parte de las redirecciones:

if ($in_order) {
     wp_safe_redirect('https://academia.local/test');
     exit;
} else {
     wp_safe_redirect('https://academia.local/test-2');
     exit;
}

En la parte que envuelve el IF, indicaremos una URL para aquellos productos que están en el array, y en la parte de ELSE irán todo el resto de productos.

Y esto es todo! Ya tienes varios ejemplos para hacer redirecciones después de comprar algo en WooCommerce.

Por último, comentarte que la gente de YITH tiene un plugin maravilloso para hacer estas cosas sin código, así que tienes también esta opción. No es un enlace de afiliados, jurado 😀

YITH WooCommerce Custom Thank You Page

¿Haces webs para clientes
y te has atascado en
precios bajos?

He creado un programa formativo para ayudarte a ganar más dinero por cada proyecto, gestionar mejor a tus clientes y trabajar con orden y tranquilidad en tus servicios de diseño y desarrollo web.