Funcția wp_redirect() nu funcționează
wp_redirect($post->guid)
nu funcționează. Cum pot repara acest lucru?
Acesta este codul meu:
if(isset($_REQUEST['vid']) ){
$id=$_REQUEST['vid'];
$post_title = 'sasa';
$post_content ='zxczxczxc';
$new_post = array(
'ID' => '',
'post_author' => $user->ID,
'post_content' => $post_content,
'post_title' => $post_title,
'post_status' => 'publish',
// ACUM ESTE DEJA UN ARRAY
);
$post_id = wp_insert_post($new_post);
// Aceasta te va redirecționa către postarea nou creată
$post = get_post($post_id);
$url=$post->guid;
wp_redirect($post->guid);
}

Două probleme aici:
- Nu folosi
$post->guid
ca URL - Trebuie neapărat să folosești
exit()
dupăwp_redirect()
(vezi Codex)
wp_redirect()
nu se încheie automat și ar trebui aproape întotdeauna urmat de exit. Pentru a redirecționa către pagina noului post:
//..... cod ca în întrebare
$post_id = wp_insert_post($new_post);
$url = get_permalink( $post_id );
wp_redirect($url);
exit();

nu funcționează, dacă rulez pagina consola arată 302 Found 479ms jquery...r=1.7.1 (linia 4) GET http://localhost/wordpress/newpages-17/
200 OK 1.2s încărcare..........

Este o eroare JS. Nu are legătură cu wp_redirect
. Răspunsul de mai sus este modul corect de a face acest lucru, deci probabil faci altceva greșit.

sorry.it afișează doar GET localhost/wordpress/newpages-17 200 OK 1.2s încărcare..........

@StephenHarris ai putea, te rog, să arunci o privire peste întrebarea mea despre redirecționare la http://wordpress.stackexchange.com/q/76991/10413 Am încercat și codul tău din acest răspuns folosind $pid, dar tot nu funcționează. Mulțumesc

Am o soluție simplă, te rog citește:
Dacă folosești
wp_redirect($url)
în fișierele de temă și nu funcționează, adaugăob_clean() ob_start()
în fișierul tău de funcții în partea de sus.Dacă folosești într-un plugin, adaugă
ob_clean() ob_start()
în fișierul principal al pluginului în partea de sus.
Și asigură-te că ai adăugat exit() după wp_redirect($url)
Astfel:
$url = 'http://example.com';
wp_redirect($url);
exit();

Acest lucru rezolvă problema cu Mozilla Firefox care returnează 200 în loc de 302 pentru redirecționare. Chrome face redirecționarea în timp ce Firefox nu. Această remediere ajută. Mulțumesc!

Acesta este un răspuns mai detaliat dacă creezi un plugin sau proiectezi un șablon. A funcționat pentru mine.

M-am chinuit să fac asta să funcționeze în tema mea personalizată... Funcționează perfect...

Rețineți, așa cum s-a menționat într-un alt răspuns, că pe șabloane trebuie să faceți verificarea autentificării și redirecționarea înainte de funcția 'get_header()', sau să plasați funcția de verificare a autentificării în add_filter('init','mylogincheck') în șablonul dumneavoastră. Altfel, va apărea o eroare 'headers already sent' care s-ar putea să nu apară în jurnalul de erori (în funcție de setările de eroare).

A funcționat! Din politețe față de alți dezvoltatori, asigurați-vă că apelați ob_clean
a doua oară. ob_clean();ob_start(); /*plugin code*/ ob_clean();

Nu sunt sigur dacă asta va ajuta... dar am descoperit că aveam niște cod într-un șablon și începeam cu get_header() în felul următor:
<?php
/**
* .. Comentarii pentru șablon
*/
get_header();
if(...) {
...
if(...) {
...
wp_redirect($url);
exit();
}
}
?>
și primeam aceeași eroare de header trimis anterior... Ce am făcut a fost să mut get_header() la sfârșitul blocului și voila!!!
<?php
/**
* .. Comentarii pentru șablon
*/
if(...) {
...
if(...) {
...
wp_redirect($url);
exit();
}
}
get_header();
?>
Niciun plugin nu a fost dezactivat. și totul a funcționat... poți încerca dacă funcționează și pentru tine

Aceasta este o metodă bună de a face acest lucru, dacă ai acces la codul sursă al temei. Redirectările ar trebui să ruleze înainte de apelul către get_header
.

Niciodată nu folosiți valoarea GUID a postării, aceasta nu trebuie să corespundă cu URL-ul real al postării.
http://codex.wordpress.org/Changing_The_Site_URL#Important_GUID_Note
wp_redirect( get_permalink( $post_id ) );
exit(); // întotdeauna folosiți exit()
De asemenea, asigurați-vă că wp_redirect
nu este blocat de altceva care îi împiedică funcționarea corectă. Dezactivați toate plugin-urile și reveniți la tema Twenty Ten/Eleven pentru a verifica.

Am avut aceleași probleme aici, Am încercat diverse metode precum
add_action( 'init', 'my_function_name'); sau add_action( 'wp_head', 'my_function_name'); dar nu funcționează
în final am găsit un hook care funcționează perfect pentru redirecționare, mai jos codul meu complet în functions.php
function redirect_homepage(){
ob_clean();
ob_start();
$args = array(
'public' => true,
'_builtin' => false,
);
$output = 'names'; // names sau objects, implicit este names
$operator = 'and'; // 'and' sau 'or'
$post_types = get_post_types( $args, $output, $operator );
if(is_singular($post_types)){
$url = get_bloginfo('url');
wp_redirect($url, '301');
exit();
}
}
add_action( 'template_redirect', 'redirect_homepage');
folosește simplu hook-ul add_action( 'template_redirect', 'my_function_name');
Notă: folosesc un child-theme

Asigurați-vă că nu aveți: get_header();
sau orice altă funcție WordPress care poate crea conținut precum antetul sau subsolul în șablonul vostru. În caz contrar, redirecționarea nu va funcționa.
Unii dezvoltatori încearcă să curețe pagina folosind ob_start();
, dar dacă aveți conținut pe pagină, chiar dacă utilizați ob_start();
, redirecționarea nu va funcționa.
Și apoi încercați pur și simplu acest cod:
wp_redirect(get_permalink($post->ID));
exit;
