Redireccionar la página de la tienda de WooCommerce para ocultarla

Cuando una página está configurada como tienda en ajustes de WooCommerce aparece visible aunque esté en borrador o como privada. ¿Cómo podemos ocultarla entonces?


por

Hace poco me encontré con un caso que me tuvo un poco loca durante unos días. Un cliente estaba preparando una nueva sección para su web añadiendo una tienda con WooCommerce.

Como todavía no estaba terminada y tenía que acabar de preparar las fichas de productos y el diseño de la tienda, puso la página de la tienda en borrador, pero resultó que aún así era visible entrando como usuario o en modo incógnito.

Extrañado, además de dejarla en borrador, la puso como página privada, pero seguía viéndose si accedías a la url sin haber iniciado sesión, así que además, le añadió una contraseña a esa página con los ajustes de WordPress y…. ¡oh, sorpresa! seguía siendo accesible por cualquiera.

Después de consultarme su problema estuve buscando información al respecto, y por lo que parece, cuando configuras una página como la principal de la tienda en los ajustes de WooCommerce, ésta deja de hacer caso omiso a los ajustes de visibilidad que le indiques.

En principio, si no tienes enlazada esa página desde ningún sitio de la web y la tienes indicada para que no se indexe, nadie debería acceder a esa url, pero si por casualidad alguien prueba de ir a www.tudominio.com/tienda (o la url que corresponda) podrá acceder a esa página sin problemas.

La solución que aplicamos en este caso para evitarlo y mientras no estuviera lista, fue añadir un código que comprobarla si era la página configurada como tienda en WooCommerce (con el condicional is_shop()), y que además comprobara si el usuario tenía permisos de administrador (con current_user_can()), y si no era así, los redireccionara a la home de la web.

Os dejo aquí el código por si os sirve para este caso en concreto o adaptado a otro tipo de página y/o usuario:

Nota: ojo que es fácil confundirse para comprobar si el usuario es administrador con la función is_admin(), pero ésta sirve para comprobar si estás cargando una página del administrador, no tiene nada que ver con el rol del usuario. Aquí tienes más información sobre is_admin()