Dove va posizionato wp_redirect per farlo funzionare?

17 mag 2012, 19:23:24
Visualizzazioni: 14.1K
Voti: 7

Ho una pagina di modifica dei post front-end situata su mysite/post_id/edit e sto cercando di reindirizzare gli utenti che non sono l'autore del post alla visualizzazione del post stesso. Ecco il codice con cui sto lavorando:

    <?php
    global $current_user; get_currentuserinfo();
    if($post->post_author != $current_user->ID):
    wp_redirect( the_permalink() ); exit;
    ?>

Il problema che sto riscontrando è che questo codice sembra semplicemente visualizzare il permalink del post anziché reindirizzare.

wp_redirect dice "wp_redirect non verrà chiamato se la pagina è già iniziata, quindi assicurati di chiamarlo più in alto" - ma dopo aver posizionato il codice all'inizio del file header.php ho ancora lo stesso problema del permalink che viene visualizzato invece del reindirizzamento.

Quale sarebbe il posto appropriato per aggiungere questo codice per ottenere il reindirizzamento?

Grazie in anticipo!

MODIFICA: Ho provato qualcosa seguendo il consiglio di milo, ma seguirò il post di Tommix prima di aggiornare su Milo

0
Tutte le risposte alla domanda 3
2
15

Una volta che sei nel template è troppo tardi, poiché gli header sono già stati inviati. Devi agganciarti prima nella richiesta per verificare, utilizzando l'hook template_redirect:

add_action( 'template_redirect', 'wpse52455_redirect' );

function wpse52455_redirect(){
    // fai il tuo controllo e chiama wp_redirect qui
}

Nota che questa funzione verrà chiamata su ogni richiesta, quindi devi anche verificare che la pagina corrente sia la tua pagina di modifica.

MODIFICA - il codice sopra dovrebbe essere inserito nel file functions.php del tuo tema.

17 mag 2012 19:57:19
Commenti

sia add_action che la funzione dovrebbero essere inseriti in functions.php?

Stephen S. Stephen S.
17 mag 2012 20:43:55

@StephenS. sì, entrambi in functions.php.

Milo Milo
17 mag 2012 20:46:23
0
-2

potresti aver bisogno di aggiungere un po' di 'priorità' alla chiamata dell'azione. Come:

add_action('template_redirect', 'user_logged_in', 1, 1);
3 ago 2014 16:38:58
6
-3

RISPOSTA COMPLETAMENTE FUNZIONANTE:

global $current_user; get_currentuserinfo();
if($post->post_author != $current_user->ID){
wp_redirect(get_post_permalink($post->ID)); 
 exit();
}
17 mag 2012 20:51:26
Commenti

Questo codice attuale restituisce Cannot modify header information - headers already sent by

Stephen S. Stephen S.
17 mag 2012 21:21:54

Strano, per me funziona perfettamente. L'ho aggiunto nel file single.php. Forse il tuo file sta già facendo echo di qualcosa? Inserisci il codice il più in alto possibile nel file php. Ovviamente dovrebbe anche ottenere il $post perché se non lo ottiene, non saprà se l'utente è l'autore quindi dovrebbe andare dopo che la variabile $post ha i dati. Perché il codice è buono, è solo un posizionamento sbagliato :) forse hai messo questo codice in un file incluso?

Tommixoft Tommixoft
17 mag 2012 21:26:14

Hai ragione - funziona parzialmente - anche se stranamente sta reindirizzando quando ($post->post_author == $current_user->ID) anziché quando ($post->post_author != $current_user->ID)

Stephen S. Stephen S.
17 mag 2012 21:52:21

cosa succede se provi a usare questo $post->post_author !== $current_user->ID

Tommixoft Tommixoft
17 mag 2012 21:58:43

ah capisco, non è in grado di ottenere $post->author perché quella variabile non è stata impostata così presto nella pagina

Stephen S. Stephen S.
17 mag 2012 23:10:58

se la risposta ti è stata utile - per favore selezionala come valida, così da aiutare altre persone a sapere quali risposte hanno risolto la domanda.

Tommixoft Tommixoft
18 mag 2012 00:07:41
Mostra i restanti 1 commenti