La funzione wp_redirect() non funziona
wp_redirect($post->guid)
non funziona. Come posso risolvere questo problema?
Questo è il mio codice:
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',
// ORA È GIÀ UN ARRAY
);
$post_id = wp_insert_post($new_post);
// Questo reindirizzerà al post appena creato
$post = get_post($post_id);
$url=$post->guid;
wp_redirect($post->guid);
}

Due cose sbagliate qui:
- Non usare
$post->guid
come URL - Devi assolutamente usare
exit()
dopowp_redirect()
(vedi il Codex)
wp_redirect()
non termina automaticamente l'esecuzione e dovrebbe quasi sempre essere seguito da exit.Per reindirizzare alla pagina del tuo nuovo articolo:
//..... codice come nella domanda
$post_id = wp_insert_post($new_post);
$url = get_permalink( $post_id );
wp_redirect($url);
exit();

non funziona, se eseguo la pagina la console mostra 302 Found 479ms jquery...r=1.7.1 (line 4) GET http://localhost/wordpress/newpages-17/
200 OK 1.2s loading..........

Questo è un errore JS. Niente a che fare con wp_redirect
. La risposta sopra è il modo corretto per farlo, quindi devi aver sbagliato qualcos'altro.

sorry.it mostra solo GET localhost/wordpress/newpages-17 200 OK 1.2s caricamento..........

@StephenHarris potresti dare un'occhiata alla mia domanda sui reindirizzamenti su http://wordpress.stackexchange.com/q/76991/10413 Ho anche provato il tuo codice da questa risposta usando $pid ma ancora non riesco a farlo funzionare. Grazie

Ho una soluzione semplice, per favore leggi:
Se stai usando
wp_redirect($url)
nei file del tema e non funziona, aggiungiob_clean() ob_start()
nel tuo file functions.php all'inizio.Se lo usi in un plugin, aggiungi
ob_clean() ob_start()
nel file principale del plugin all'inizio.
E assicurati di aver aggiunto la funzione exit() dopo wp_redirect($url)
in questo modo:
$url = 'http://example.com';
wp_redirect($url);
exit();

Questo risolve il problema con Mozilla Firefox che restituisce 200 invece di 302 per il reindirizzamento. Chrome effettua il reindirizzamento mentre Firefox no. Questa correzione aiuta. Grazie!

Questa è una risposta più dettagliata se stai creando un plugin o progettando un template. Ha funzionato per me.

Ho avuto difficoltà a far funzionare questo nel mio tema personalizzato... Funziona perfettamente...

Nota, come menzionato in un'altra risposta, che nei template è necessario effettuare il controllo di login e il reindirizzamento prima della funzione 'get_header()', oppure inserire la tua funzione di controllo login nell'add_filter('init','mylogincheck') nel tuo template. Altrimenti, si verificherà un errore 'headers already sent' che potrebbe non apparire nel tuo log degli errori (a seconda delle impostazioni degli errori).

Funziona! Per cortesia verso altri sviluppatori, assicurati di chiamare ob_clean
una seconda volta. ob_clean();ob_start(); /*codice plugin*/ ob_clean();

Non sono sicuro che questo possa aiutare... ma ho scoperto che avevo del codice in un template e stavo iniziando con get_header() in questo modo:
<?php
/**
* .. Commenti del template
*/
get_header();
if(...) {
...
if(...) {
...
wp_redirect($url);
exit();
}
}
?>
e ottenevo lo stesso problema degli header già inviati... Quello che ho fatto è stato spostare get_header() alla fine del blocco e voilà!!!
<?php
/**
* .. Commenti del template
*/
if(...) {
...
if(...) {
...
wp_redirect($url);
exit();
}
}
get_header();
?>
Nessun plugin è stato disattivato. E tutto funzionava correttamente... potresti provare se funziona anche per te

Questo è un buon modo per farlo, se hai accesso al codice sorgente del tema. I reindirizzamenti dovrebbero essere eseguiti prima della chiamata a get_header
.

Non utilizzare mai il valore GUID del post, non deve necessariamente corrispondere all'URL reale del post.
http://codex.wordpress.org/Changing_The_Site_URL#Important_GUID_Note
wp_redirect( get_permalink( $post_id ) );
exit(); // uscire sempre
Inoltre, assicurati che wp_redirect
non sia bloccato da qualcos'altro che ne impedisce il corretto funzionamento. Disattiva tutti i plugin e torna al tema Twenty Ten/Eleven per verificare.

Anch'io ho avuto gli stessi problemi,
ho provato vari metodi come
add_action( 'init', 'my_function_name'); o add_action( 'wp_head', 'my_function_name'); ma non funzionavano
alla fine ho trovato l'hook che funziona perfettamente per il reindirizzamento,
ecco il mio codice completo in functions.php
function redirect_homepage(){
ob_clean();
ob_start();
$args = array(
'public' => true,
'_builtin' => false,
);
$output = 'names'; // nomi o oggetti, nota che names è il default
$operator = 'and'; // 'and' o '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');
basta usare l'hook add_action( 'template_redirect', 'my_function_name');
Nota: utilizzo un child-theme

Assicurati di non avere: get_header();
o qualsiasi funzione WordPress che potenzialmente crea contenuti come header e footer nel tuo template. Altrimenti il reindirizzamento non funzionerà.
Alcuni sviluppatori provano a pulire la pagina usando ob_start();
ma se hai contenuto nella tua pagina anche se usi ob_start();
il reindirizzamento non funzionerà.
e poi prova semplicemente questo codice:
wp_redirect(get_permalink($post->ID));
exit;
