WooCommerce e is_user_logged_in(): reindirizzare gli utenti non autenticati alla homepage
Sto utilizzando WooCommerce e vorrei reindirizzare gli utenti non autenticati alla homepage, ma ho qualche difficoltà nel determinare dove implementare questa funzionalità.
Dalla mia ricerca ho capito che posso usare la funzione is_user_logged_in() per verificare se l'utente è loggato.
Ho provato a implementarla nel file woocommerce/woocommerce-functions.php:
// Quando i permalink predefiniti sono abilitati, reindirizza la pagina shop all'URL dell'archivio del tipo di post
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;
ma la pagina rimane comunque visibile

Innanzitutto, non modificare mai i plugin di altre persone o i file core di WordPress.
Inoltre, utilizza le parentesi graffe invece di formattazioni estetiche, poiché queste ultime possono interrompere l'evidenziazione del codice nell'IDE, la corrispondenza delle parentesi, i controllori di sintassi e altri strumenti utili.
Quindi inserisci questo codice:
// Quando i permalink predefiniti sono abilitati, reindirizza la pagina del negozio all'URL dell'archivio del tipo di post
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();
}
In uno di questi punti:
- all'inizio di functions.php
- in un plugin dedicato
- nella chiamata all'hook Init

Dovrai inserire il tuo codice all'inizio dei template delle pagine Woo che desideri influenzare con il reindirizzamento, piuttosto che nel file functions. Ad esempio, se vuoi reindirizzare gli utenti quando cercano di accedere a una pagina di prodotto singolo, potresti inserirlo all'inizio del file plugins->woocommerce->templates->single-product.php.
Tuttavia, quando modifichi i template, ti consiglio di crearne una copia e posizionarla nella directory del tuo tema, in modo che quando WooCommerce verrà aggiornato non sovrascriverà le modifiche che hai apportato. Quindi, per l'esempio che ho fornito sopra (applicato al mio tema), copiere single-product.php e lo inserirei nella cartella themes->agency, apportando poi le modifiche necessarie direttamente lì. In questo modo, il tuo tema utilizzerà sempre quel file prima di quello presente nella cartella dei template di WooCommerce.

grazie, sai quale pagina dovrebbe essere modificata per reindirizzare gli utenti che visualizzano la pagina iniziale del negozio?

Poiché la pagina del negozio è effettivamente un loop, potresti inserire un hook nel tuo file functions.php. Copia questo codice e fammi sapere se funziona. http://pastie.org/4830106. Ho alcuni elementi strani sulla mia pagina del negozio (essenzialmente l'ho cancellata) quindi non posso testarlo personalmente. Se non funziona, lo sistemerò.

hm dopo aver aggiunto questo al mio file functions.php del tema, l'intero sito ha smesso di funzionare. dovevo aggiungerlo al file functions di woocommerce?

Scusa ho fatto un errore di sintesi pigro, cancella quello e prova questo http://pastie.org/4830960

Ok, ho testato questo codice e funziona sicuramente: http://pastie.org/4831059. Incollalo nel file functions.php

Non sono d'accordo con l'inserimento di quel codice all'inizio dei template di pagina per le pagine Woo. Dovrebbe essere utilizzato l'template_redirect
action hook.
