Redirigir usuarios no logueados a la página de inicio en WooCommerce con is_user_logged_in()
Actualmente estoy usando WooCommerce y me gustaría redirigir a los usuarios no logueados a la página de inicio, pero tengo algunos problemas para determinar dónde debería implementar esto.
He investigado y determinado que usando is_user_logged_in() puedo verificar si el usuario está logueado.
Intenté implementarlo en woocommerce/woocommerce-functions.php
// Cuando los permalinks predeterminados están habilitados, redirige la página de tienda a la URL del archivo de tipo de publicación
if (is_user_logged_in() && isset($_GET['page_id']) && $_GET['page_id'] > 0 && get_option( 'permalink_structure' )=="" && $_GET['page_id'] == woocommerce_get_page_id('shop') ) :
wp_safe_redirect( get_post_type_archive_link('product') );
exit;
endif;
pero la página sigue siendo visible

Primero, nunca edites los plugins de otras personas ni los archivos principales de WordPress.
Además, utiliza llaves en lugar de formato bonito, ya que el formato bonito rompe el resaltado de código del IDE, el emparejamiento de llaves, los verificadores de sintaxis y otras herramientas útiles.
Así que coloca este código:
// Cuando los enlaces permanentes predeterminados están habilitados, redirige la página de la tienda a la URL del archivo del tipo de publicación
if (is_user_logged_in() && isset($_GET['page_id']) && $_GET['page_id'] > 0 && get_option( 'permalink_structure' )=="" && $_GET['page_id'] == woocommerce_get_page_id('shop') ) {
wp_redirect( get_post_type_archive_link('product') );
die();
}
Ya sea en:
- la parte superior de functions.php
- Un plugin dedicado
- En la llamada del hook Init

Vas a querer insertar tu código en la parte superior de las plantillas de página para las páginas de Woo que deseas que afecte la redirección, en lugar del archivo de funciones. Por ejemplo, si quieres redirigir a los usuarios cuando intentan acceder a una página de producto individual, podrías colocarlo al principio del archivo plugins->woocommerce->templates->single-product.php.
Sin embargo, al editar plantillas, recomendaría hacer una copia y colocarla en el directorio de tu tema, para que cuando Woo se actualice no sobrescriba los cambios que hayas realizado. Siguiendo el ejemplo anterior (aplicado a mi tema), copiaría single-product.php y lo colocaría en el directorio themes->agency y luego haría los cambios en ese archivo allí. Tu tema siempre usará ese archivo antes que el del directorio de plantillas de Woo.

gracias, ¿sabes qué página habría que modificar para redirigir a los usuarios que ven la página inicial de la tienda?

Dado que la página de la tienda es en realidad un loop, podrías agregar un hook en tu archivo functions.php. Copia esto y dime si funciona. http://pastie.org/4830106. Tengo cosas extrañas en mi página de tienda (básicamente la eliminé) así que no puedo probarlo yo mismo. Si no funciona, lo arreglaré.

hmm después de agregar eso a mi archivo functions.php del tema, todo el sitio dejó de funcionar. ¿se suponía que debía agregarlo al archivo de funciones de woocommerce?

Perdón por el error de sintaxis perezoso, borra eso e intenta esto http://pastie.org/4830960

Vale, he probado este código y definitivamente funciona: http://pastie.org/4831059. Pega eso en el archivo functions.php

No estoy de acuerdo con insertar ese código en la parte superior de las plantillas de página para las páginas de Woo. Se debería usar el template_redirect
action hook.
