Redirigir a página fin de compra personalizada según el producto que haya comprado el cliente

Gracias a este snippet para WooCommerce conseguirás redirigir a una página personalizada de fin de compra según el producto que haya comprado el cliente. Para configurarlo solo tienes que sustituir los ID de los productos por los tuyos e indicar cual será la página personalizada de fin de compra.

Sigue las indicaciones en los comentarios del snippet para cambiar los ids de los productos por los tuyos y la página de agradecimiento.

Snippet WooCommerce para redirigir a una página de fin de compra personalizada en función de que productos compre el cliente

// Redirige al cliente a una página de fin de compra personalizada según el producto que haya comprado
if ( in_array( 'woocommerce/woocommerce.php', get_option( 'active_plugins' ) ) && ( version_compare( WC()->version, '3.0.0', '>=' ) ) ){

	add_action( 'template_redirect', 'wc_custom_redirect_after_purchase' );
	function wc_custom_redirect_after_purchase() {
	    	global $wp;
	    	$products_list = array( 17453, 17253 ); // Añade aquí los IDs de tus productos o usa '*' para que se aplique a todos los productos de la tienda
	    	$page_ID = 16089; // Indica aquí el ID de la página de agradecimiento personalizada
		
	    	if ( is_checkout() && ! empty( $wp->query_vars['order-received'] ) ) {
	    	    	$order_id  = absint( $wp->query_vars['order-received'] );
	    	    	$order_key = wc_clean( $_GET['key'] );
	    	    	$order = wc_get_order( $order_id );
		
	    	    	$redirect  = get_permalink( $page_ID );
	    	    	$redirect .= get_option( 'permalink_structure' ) === '' ? '&' : '?';
	    	    	$redirect .= 'order=' . $order_id . '&key=' . $order_key;
			
	    	    	foreach( $order->get_items() as $item ) {
	    	    		$_product = wc_get_product( $item['product_id'] );
	
	    	    		if ( in_array( $item['product_id'], $products_list ) || in_array( '*', $products_list ) ) {
	
	    	    			wp_redirect( $redirect );
	    	    			exit;
	    	    		}
	    	    	}
	    	}
	}
	
	add_shortcode( 'wc_custom_thank_you_order_review', 'render_wc_custom_thank_you_order_review' );
	function render_wc_custom_thank_you_order_review(){
		$order_review;
	
		// check if the order ID exists
	    	if ( ! isset( $_GET['key'] ) || ! isset( $_GET['order'] ) ) {
	    	    return 'Pedido no encontrado';
	    	}
		
	    	$order_id  = apply_filters( 'woocommerce_thankyou_order_id', absint( $_GET['order'] ) );
	    	$order_key = apply_filters( 'woocommerce_thankyou_order_key', empty( $_GET['key'] ) ? '' : wc_clean( $_GET['key'] ) );
	    	$order     = wc_get_order( $order_id );
		
		
	    	if ( $order->get_id() != $order_id || $order->get_order_key() != $order_key ) {
	    	    return 'Pedido no encontrado';
	    	}
		
	    	ob_start(); 
	    	?>
	
		<div class="woocommerce-order">
	
			<?php if ( $order ) : ?>
		
				<?php if ( $order->has_status( 'failed' ) ) : ?>
		
					<p class="woocommerce-notice woocommerce-notice--error woocommerce-thankyou-order-failed"><?php _e( 'Unfortunately your order cannot be processed as the originating bank/merchant has declined your transaction. Please attempt your purchase again.', 'woocommerce' ); ?></p>
		
					<p class="woocommerce-notice woocommerce-notice--error woocommerce-thankyou-order-failed-actions">
						<a href="<?php echo esc_url( $order->get_checkout_payment_url() ); ?>" class="button pay"><?php _e( 'Pay', 'woocommerce' ) ?></a>
						<?php if ( is_user_logged_in() ) : ?>
							<a href="<?php echo esc_url( wc_get_page_permalink( 'myaccount' ) ); ?>" class="button pay"><?php _e( 'My account', 'woocommerce' ); ?></a>
						<?php endif; ?>
					</p>
		
				<?php else : ?>
		
					<p class="woocommerce-notice woocommerce-notice--success woocommerce-thankyou-order-received"><?php echo apply_filters( 'woocommerce_thankyou_order_received_text', __( 'Thank you. Your order has been received.', 'woocommerce' ), $order ); ?></p>
		
					<ul class="woocommerce-order-overview woocommerce-thankyou-order-details order_details">
		
						<li class="woocommerce-order-overview__order order">
							<?php _e( 'Order number:', 'woocommerce' ); ?>
							<strong><?php echo $order->get_order_number(); ?></strong>
						</li>
		
						<li class="woocommerce-order-overview__date date">
							<?php _e( 'Date:', 'woocommerce' ); ?>
							<strong><?php echo wc_format_datetime( $order->get_date_created() ); ?></strong>
						</li>
		
						<li class="woocommerce-order-overview__total total">
							<?php _e( 'Total:', 'woocommerce' ); ?>
							<strong><?php echo $order->get_formatted_order_total(); ?></strong>
						</li>
		
						<?php if ( $order->get_payment_method_title() ) : ?>
		
						<li class="woocommerce-order-overview__payment-method method">
							<?php _e( 'Payment method:', 'woocommerce' ); ?>
							<strong><?php echo wp_kses_post( $order->get_payment_method_title() ); ?></strong>
						</li>
		
						<?php endif; ?>
		
					</ul>
		
				<?php endif; ?>
		
				<?php do_action( 'woocommerce_thankyou_' . $order->get_payment_method(), $order->get_id() ); ?>
				<?php do_action( 'woocommerce_thankyou', $order->get_id() ); ?>
		
			<?php else : ?>
		
				<p class="woocommerce-notice woocommerce-notice--success woocommerce-thankyou-order-received"><?php echo apply_filters( 'woocommerce_thankyou_order_received_text', __( 'Thank you. Your order has been received.', 'woocommerce' ), null ); ?></p>
		
			<?php endif; ?>
		
		</div>
		<?php
		$content .= ob_get_contents();
	    	ob_end_clean();
	
	    	return $content;
	}
}
Ver más tutoriales de: WooCommerce

Tutoriales relaccionados

¿Necesitas un desarrollo a medida?

Login para aceder

David Lanau Consultor de Marketing Online
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.