Verificare se un utente ha effettuato l'accesso e reindirizzarlo a una pagina diversa

24 lug 2011, 19:12:56
Visualizzazioni: 20K
Voti: 0

Sto creando un sito riservato ai membri che richiede agli utenti di essere loggati per utilizzare il sito.

La homepage è visibile pubblicamente. Nella homepage, vorrei inserire una funzione per reindirizzare gli utenti a una pagina interna del sito se hanno già effettuato l'accesso.

Il codice che ho provato

<?php if (is_user_logged_in() ) {
 wp_redirect('dashboard');
 exit;
 }
?>

Mi restituisce un errore "headers already sent". Il codice è posizionato all'inizio del mio file php.

Cosa sto sbagliando?

3
Commenti

Indica da dove vengono inviati gli header?

Bainternet Bainternet
24 lug 2011 19:27:00

/wp-includes/pluggable.php alla riga 934

javy javy
24 lug 2011 19:38:59

prova ad attivare wp_debug e vedi cosa succede lì

Bainternet Bainternet
24 lug 2011 20:57:04
Tutte le risposte alla domanda 2
4

Non sono sicuro se hai semplificato per esempio, ma assicurati di utilizzare l'URL completo nella chiamata wp_redirect().

Inoltre, invece di inserirlo nel template, penso sarebbe più appropriato eseguirlo tramite l'hook template_redirect.

24 lug 2011 20:02:16
Commenti

La mia soluzione è wp_redirect ( home_url("/dashboard") );, e ho inserito questo codice nella riga 1 del template. Anche se non ho familiarità con gli hook, probabilmente hai ragione. Perché?

javy javy
24 lug 2011 21:36:07

@javy template_redirect è semanticamente il posto giusto nel codice come "WP sa cosa deve iniziare a caricare e mostrare, ma puoi fargli cambiare idea". L'inizio del template è "stiamo già caricando questa cosa". Se non vuoi ciò che c'è nel template, non c'è motivo di arrivare fino a quel punto nel processo.

Rarst Rarst
24 lug 2011 21:53:19

Ha senso, sembra che faccia risparmiare un po' di utilizzo del server?

javy javy
25 lug 2011 03:14:52

@javy Non credo che la differenza in termini di prestazioni sia significativa tra i due.

Rarst Rarst
25 lug 2011 10:28:10
0
<?php if (is_user_logged_in() ) {
wp_redirect ( home_url("/dashboard") ); // Reindirizza l'utente loggato alla dashboard
exit;
}
?>

È quello che ho ottenuto, e funziona. Inoltre, penso di aver commesso un errore inserendo questo sotto

<?php
/*Template Name: Home*/
?>

Il nuovo codice è sulla riga 1 e funziona.

25 lug 2011 03:13:41