blog webempresa

Solo usuarios registrados puedan finalizar la compra en WooCommerce

por | Ene 18, 2024 | Tutoriales sobre WooCommerce

Solo usuarios registrados puedan finalizar la compra en Woocommerce

A menudo nos encontramos en la situación de querer que todos nuestros posibles clientes proporcionen sus datos al realizar una compra. Sin embargo, es crucial considerar el comportamiento del cliente frente a múltiples pasos para completar la compra. Al enfrentarse a un proceso extenso, algunos pueden perder interés y abandonar el proceso a mitad de camino.

Por otro lado, existe un tipo de cliente menos convencional que tiende a acelerar y omitir rápidamente los pasos sin prestar atención al procedimiento. Esto puede resultar en compras o pedidos exitosos, pero con la consecuencia de tener usuarios registrados con datos incorrectos o ficticios. Encontrar un equilibrio que facilite la recopilación de información sin afectar la experiencia del usuario es clave para optimizar este proceso.

Una solución simple es el habilitar la limitación en la cual solo los usuarios registrados pueden comprar en WooCommerce; sin embargo, es posible que si llevamos al usuario de la mano y le dejamos de forma visible donde registrarse lo mas probable es que no lo haga.

A continuación, vamos a ver como por medio de opciones ya integradas a WooCommerce podemos hacer que sea obligatorio que un usuario se registre para poder hacer un pedido en WooCommerce, y una alternativa por medio de código que deshabilita la posibilidad de ver la página de finalizar compra sin antes haber iniciado sesión o haber creado una cuenta.

  Limitar compra a solo usuarios registrados desde WooCommerce

 

La alternativa más simple y directa viene integrada por defecto en WooCommerce como mencionamos anteriormente, solo basta con dirigirnos a las opciones WooCommerce-> Ajustes-> Cuentas y privacidad donde tendremos un listado de opciones que podemos activar/desactivar según nuestras necesidades.

Para el caso práctico de vamos a recrear el siguiente ejemplo, donde queremos que el usuario además de que sea necesario que se registre para hacer un pedido en WooCommerce, deba proporcionar el mismo directamente su contraseña, para ello vamos a tener una configuración similar a la siguiente.

registro finalizar compra

Donde podemos definir las siguientes opciones:

  • Pago como invitado: Solo dejaremos activo de que un cliente con una cuenta existente pueda acceder a su cuenta para continuar con el proceso
  • Creación de cuenta: Mantendremos activas las opciones necesarias que correspondan desde donde puede el usuario iniciar sesión o crear su cuenta, bien sea desde la página de “Mi cuenta” o directamente desde el apartado de finalizar compra.
  • Opción desactivada, enviar enlace para establecer contraseña: Acá es cuestión de gustos, dependiendo del caso es preferible que el usuario reciba el correo y continúe con el proceso de establecer una contraseña, sin embargo, lo que queremos es causar la menor fricción posible, así que mantenemos esta opción desactivada para que aparezca el campo de contraseña al momento del registro.

Luego de guardar cambios tendremos una vista del apartado de finalizar compra con un aspecto similar al siguiente, donde el campo de la contraseña será requerido para que con la información complementaria del pedido donde tenemos nombre, teléfono, correo electrónico y entre otros datos formen parte del perfil del cliente.

registro finalizar compra WooCommerce

  Limitar compra a solo usuarios registrados desde Código

 

Hemos visto que desde la configuración de WooCommerce es muy sencillo lograr el cometido de que solo aquellos usuarios registrados puedan finalizar la compra, pero que sucede si queremos que el apartado de finalizar compra o la también conocida página del checkout de WooCommerce quede completamente inaccesible para todos aquellos usuarios que no han iniciado sesión o no se han registrado.

Esto es posible por medio de un fragmento de código, el cual como bien mencionamos funciona de la siguiente manera, cualquier usuario puede añadir productos a su carrito y navegar el sitio, pero al momento de ir a “Finalizar compra” será redireccionado automáticamente a la página de “Mi cuenta” lo que hace es incentivar al inicio de sesión o el registro y luego de hacer alguna de estas dos acciones es entonces que si será redireccionado nuevamente a la página de “Finalizar compra”.

Puede parecer confuso, pero considerando que la finalidad es que en efecto el usuario si exista como cliente registrado es una acción eficaz y reduce considerablemente la fricción, ya que estamos llevando de la mano al usuario para que ejecute la acción que requerimos además de aislarlo de la posibilidad de hacer una compra o pedido con datos erróneos.

Teniendo en cuenta lo explicado esto podemos lograrlo mediante un fragmento de código el cual vamos a agregarlo de la siguiente forma.

Por medio de la edición del archivo functions.php que está ubicado en nuestra cuenta de hosting dentro de nuestro cPanel/WePanel en la ruta Administrador de archivos -> public_html -> wp-content -> Themes -> Tu_Tema (se recomienda que sea en un tema hijo de WordPress para no perder ajustes tras una actualización en el tema principal).

En Cpanel

archivos cpanel

En WePanel

archivos wepanel

Por medio de un plugin que nos permite agregar snippets en WordPress de forma aislada códigos específicos llamado Code Snippets:

plugin code snippets

(Visita el plugin haciendo clic en la imagen ↑)

El código en cuestión que vamos a agregar es el siguiente:


add_action('template_redirect', 'woocommerce_custom_redirections');
function woocommerce_custom_redirections() {
   
    if ( !is_user_logged_in() && is_checkout() )
        wp_redirect( get_permalink( get_option('woocommerce_myaccount_page_id') ) );
}

// REDIRECCION REGISTRO
add_filter("woocommerce_registration_redirect", "wcs_register_redirect");
function wcs_register_redirect($redirect) {
  $redirect = "https://misitioweb.com/finalizar-compra/";
  return $redirect;
}

// REDIRECCION INICIO SESION
add_filter("woocommerce_login_redirect", "wcs_register_login");
function wcs_register_login($redirect) {
  $redirect = "https://misitioweb.com/finalizar-compra/";
  return $redirect;
}

Primero que nada podemos apreciar que se establece una función que redirige a los usuarios no autenticados que están en la página de pago a la página de la cuenta si no han iniciado sesión.

Luego se establece el código donde podemos encontrar dos filtros.

Uno encargado de hacer la redirección 301 justo después que el usuario crea su cuenta y se registra.

redireccion al finalizar compra en WooCommerce

Otro encargado de hacer la redirección justo después de que el usuario inicia su sesión.

registro al finalizar compra en WooCommerce

En ambos casos es necesario remplazar el enlace que corresponde a “misitioweb.com” por la URL que corresponda al la pagina de “Finalizar compra”.

Este fragmento de código se encargará de personalizar las redirecciones en WooCommerce, haciendo la redirección a los usuarios no autenticados a la página de “Mi cuenta” durante el pago, y ajusta las redirecciones después de registrarse o iniciar sesión para llevar al usuario a la página de finalizar compra.

  ¿Cómo añadir registro obligatorio en algunos productos de WooCommerce?

 

Si bien ambos métodos previamente expuestos son igualmente efectivos, existe un tercer escenario en el cual deseamos que el registro sea obligatorio únicamente para concluir la compra, pero esta restricción se aplicará únicamente a ciertos productos.

En este caso, implementar esta configuración específica es completamente viable mediante los siguientes pasos.

Entre las acciones a llevar a cabo, es esencial considerar que la tienda permitirá a los usuarios finalizar la compra sin necesidad de tener una cuenta en la mayoría de los productos disponibles.

Para lograr esto, es necesario habilitar la opción “Permitir a los clientes realizar pedidos sin crear una cuenta”. Puedes realizar esta configuración accediendo a las opciones de WooCommerce -> Ajustes y seleccionando la pestaña “Cuentas y privacidad” desde el panel de escritorio de WordPress.

compras sin registro woocommerce

Una vez activada esta opción, es crucial especificar qué productos requerirán un registro obligatorio para completar la compra. Para lograrlo, es fundamental tener identificados los ID de cada uno de estos productos.

Determinar el ID de un producto resulta más sencillo de lo que parece. Desde el listado de productos, simplemente coloca el cursor sobre el producto deseado para visualizar el ID entre las opciones de edición del producto.

ver ID del producto

Con los IDs de los productos que requerirán de un registro obligatorio para poder finalizar la compra, vamos a proseguir a añadir el siguiente fragmento de código.

add_filter( 'woocommerce_checkout_registration_required', 'we_checkout_registration_required', 10, 1 );
function we_checkout_registration_required( $bool_value ) {
    // colocar IDs de los productos que requieren registro
    $product_ids = array ( 13 );
	if ( ! WC()->cart ) return $bool_value;
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        if ( in_array( $cart_item['product_id'], $product_ids ) ) {
            $bool_value = true;
            break;
        }
    }	
    return $bool_value;
}

fragmento de codigo de productos que requieren registro

Podemos explicar el fragmento de código usado de la siguiente manera.

add_filter( ‘woocommerce_checkout_registration_required’, ‘we_checkout_registration_required’, 10, 1 );: se crea un filtro que se ejecutará cuando WooCommerce determine si el registro es necesario durante el proceso de pago. Llama a la función we_checkout_registration_required que se definirá a continuación.

function we_checkout_registration_required( $bool_value ) {: se define la función que se ejecutará con el filtro. Recibe un valor booleano ($bool_value), que indica si el registro es necesario según la configuración actual.

$product_ids = array( 13 );: establece un array con los IDs de los productos que requieren registro durante el proceso de pago, pueden colocarse varios IDs separados por comas.

if ( ! WC()->cart ) return $bool_value;: verifica si el carrito de compras existe. Si no hay carrito, simplemente retorna el valor original sin realizar cambios.

foreach ( WC()->cart->get_cart() as $cart_item ) {: realiza una iteración sobre los elementos del carrito de compras.

if ( in_array( $cart_item[‘product_id’], $product_ids ) ) {: verifica si el ID del producto actual está en la lista de IDs que requieren registro.

$bool_value = true;: si un producto en el carrito requiere registro, se establece que se necesita el registro durante el proceso de pago.

break;: ejecuta la salida del bucle, ya que un producto que requiere registro es suficiente para modificar la necesidad de registro.

return $bool_value;: devuelve el valor final, que puede ser el original o modificado según si algún producto en el carrito requiere registro.

Ya con el fragmento de código guardado, podemos ejecutar la prueba de añadir al carrito el producto con el ID que hemos previamente definido como obligatorio el registro para su compra.

Al llegar a la opción de finalizar compra tendremos un enunciado como el siguiente:

mensaje finalizar compra

De esta manera podemos validar que el código está realizando la validación como lo esperado.

  Conclusión

 

Hemos explorado diversas alternativas efectivas para asegurar que cualquiera que realice compras en nuestra tienda deba ser parte de los usuarios registrados, evitando así pedidos o compras que resulten falsas con información incorrecta que, en última instancia, podrían obstaculizar el flujo de ventas en nuestra tienda de WooCommerce.

Esta restricción puede implementarse de manera convencional, permitiendo a los usuarios crear sus cuentas directamente en la página de finalización de compra de WooCommerce.

También tenemos como alternativa, para una medida más estricta, la posibilidad de limitar el acceso a la finalización de la compra hasta que se cumpla con el requisito de registro.

Además, si deseamos focalizar la validación únicamente en productos específicos de nuestra tienda, esta opción también es completamente válida, ya queda de nosotros implementar el método que más se adapte a nuestras necesidades.

Por último, si deseas conocer mas sobre cómo crear tu tienda en Woocommerce con todos los trucos y secretos que ya hemos presentado en artículos anteriores te invitamos a echarle un vistazo a los siguientes enlaces de interés.

También te puede interesar:

¿Te ha resultado útil este artículo?

Promo Hosting WordPress con Asistente IA nativa