Haga que las páginas de WooCommerce sean accesibles solo para usuarios registrados

12

Tengo un sitio web con WordPress y un comercio electrónico con WooCommerce. Me gustaría que mi tienda (y todas sus páginas) sean vistas solo por usuarios registrados.

A través del complemento User Access Manager , he denegado el acceso a la página de la tienda, pero con un enlace directo a un producto, etc., no obstante, se puede acceder a esa página en particular, incluso si el usuario no ha iniciado sesión.

¿Cómo puedo redirigir a los usuarios, que no están conectados, a otra página si intentan acceder a una página de WooCommerce?

Alessandro
fuente

Respuestas:

24

Pon esto en tu functions.phparchivo:

function wpse_131562_redirect() {
    if (
        ! is_user_logged_in()
        && (is_woocommerce() || is_cart() || is_checkout())
    ) {
        // feel free to customize the following line to suit your needs
        wp_redirect(home_url());
        exit;
    }
}
add_action('template_redirect', 'wpse_131562_redirect');

¿Qué hace?
Verificamos si un usuario que no ha iniciado sesión quiere ver una página de WooCommerce y lo redireccionamos a nuestra página de inicio.

tfrommen
fuente
Gracias por tu ayuda. ¿El archivo functions.php está en mi carpeta de temas? ¿Y cómo puedo recordar esta función desde la página del producto? Gracias :-)
Alessandro
Muchas gracias. Tu código funciona bien para mí. Muchas muchas gracias :)
Alessandro
1
Asegúrese de no configurar ninguna de las páginas de woocommerce como su página de inicio, porque el sitio ya no funcionará.
SPRBRN
7

Acabo de cambiar la redirección a

wp_redirect( site_url('my-account/') )

para que los usuarios sean redirigidos en la página "Mi cuenta" si no están conectados o registrados.

Pierre
fuente
2
Este no es el mejor método para redirigir a la My Accountpágina. Es mejor recuperar el enlace permanente de la página Mi cuenta que ha vinculado en la configuración de WooCommerce. De esta manera, siempre que se cambie el enlace permanente o tenga un sitio en varios idiomas que ejecute, el enlace permanente se recuperará correctamente. En resumen: es mejor no codificar enlaces permanentes / slugs (o URL en general). Un método mejor sería:wp_redirect( get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) );
Rens Tillmann
tu código falta; termina
user889030
0

Me gustaría cambiar a esto

wp_safe_redirect( wc_get_page_permalink( 'myaccount' ) );

en lugar de

wp_redirect( site_url('my-account/') );
Ilias Benetos
fuente
2
¿Podría explicar por qué esto ayudará, para que otras personas puedan aprender algo de su respuesta?
Krzysiek Dróżdż