Unde trebuie plasat wp_redirect pentru a funcționa corect?

17 mai 2012, 19:23:24
Vizualizări: 14.1K
Voturi: 7

Am o pagină de editare a articolelor pe front-end la adresa mysite/post_id/edit și încerc să redirecționez utilizatorii care nu sunt autorii înapoi la articol. Iată codul cu care lucrez:

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

Problema pe care o am este că acest cod pare să afișeze permalinkul articolului în loc să facă redirecționarea.

wp_redirect spune "wp_redirect nu va fi apelat dacă pagina a început să se încarce, așa că asigură-te să-l apelezi mai sus în cod." - dar după ce am plasat codul în partea de sus a fișierului header.php am avut aceeași problemă cu afișarea permalinkului în loc de redirecționare.

Unde ar fi locul potrivit pentru a adăuga acest cod pentru a face redirecționarea?

Mulțumesc anticipat!

EDIT: Am încercat ceva cu sfatul lui milo, dar voi urma postul lui Tommix înainte de a actualiza pe baza sugestiilor lui Milo

0
Toate răspunsurile la întrebare 3
2
15

Odată ce ai ajuns în șablon, este prea târziu, deoarece antetele au fost deja trimise. Trebuie să te conectezi mai devreme în cerere pentru a verifica, cum ar fi hook-ul de redirecționare a șablonului:

add_action( 'template_redirect', 'wpse52455_redirect' );

function wpse52455_redirect(){
    // faci verificarea și apelezi wp_redirect aici
}

Reține că aceasta va fi apelată la fiecare cerere, așa că trebuie să faci și o verificare dacă pagina curentă este pagina ta de editare.

EDITARE - codul de mai sus ar trebui să fie introdus în fișierul functions.php al temei tale.

17 mai 2012 19:57:19
Comentarii

ambele, add_action și funcția, ar fi plasate în functions.php?

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

@StephenS. da, ambele în functions.php.

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

poate fi necesar să adaugi o anumită 'prioritate' la apelul acțiunii. De exemplu:

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

RĂSPUNS complet funcțional:

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

Acest cod curent returnează eroarea Cannot modify header information - headers already sent by

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

Ciudat, pentru mine funcționează perfect. L-am adăugat în fișierul single.php. Poate fișierul tău deja afișează ceva? Pune codul cât mai sus poți în partea de sus a fișierului php. Desigur, ar trebui să acceseze și variabila $post pentru că dacă nu o obține, nu va ști dacă utilizatorul este autorul, deci ar trebui să fie plasat după ce variabila $post are date. Codul în sine este bun, doar plasarea e greșită :) Poate ai pus acest cod într-un fișier inclus?

Tommixoft Tommixoft
17 mai 2012 21:26:14

Ai dreptate - funcționează parțial - deși ciudat este că redirecționează când ($post->post_author == $current_user->ID) în loc să redirecționeze când ($post->post_author != $current_user->ID)

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

ce se întâmplă dacă încerci să folosești această condiție $post->post_author !== $current_user->ID

Tommixoft Tommixoft
17 mai 2012 21:58:43

ah, am înțeles, nu poate obține $post->author deoarece acea variabilă nu a fost setată atât de devreme în pagină

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

dacă răspunsul te-a ajutat - te rog să îl marchezi ca bun, pentru ca oamenii ca tine să știe care răspunsuri au fost utile la întrebare.

Tommixoft Tommixoft
18 mai 2012 00:07:41
Arată celelalte 1 comentarii