La funzione wp_redirect() non funziona

21 mar 2012, 16:31:50
Visualizzazioni: 122K
Voti: 12

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);

} 
0
Tutte le risposte alla domanda 9
6
29

Due cose sbagliate qui:

  1. Non usare $post->guid come URL
  2. Devi assolutamente usare exit() dopo wp_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();
21 mar 2012 16:44:52
Commenti

Ti ho battuto di 30 secondi :D

soulseekah soulseekah
21 mar 2012 16:45:19

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..........

SANS780730 SANS780730
21 mar 2012 16:51:56

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.

Stephen Harris Stephen Harris
21 mar 2012 17:00:46

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

SANS780730 SANS780730
21 mar 2012 17:04:01

@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

Anagio Anagio
22 dic 2012 19:33:49

Questa domanda riceve un enorme numero di visualizzazioni, quindi per favore considera di accettare questa risposta se ha risolto il tuo problema. In questo modo la domanda appare come risolta e ci aiuta a mantenere il sito ordinato. Grazie.

Andy Macaulay-Brook Andy Macaulay-Brook
23 lug 2016 18:06:47
Mostra i restanti 1 commenti
6
14

Ho una soluzione semplice, per favore leggi:

  1. Se stai usando wp_redirect($url) nei file del tema e non funziona, aggiungi ob_clean() ob_start() nel tuo file functions.php all'inizio.

  2. 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();
10 dic 2015 07:16:25
Commenti

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!

El'Magnifico El'Magnifico
12 set 2018 16:36:49

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

Sayed Mohd Ali Sayed Mohd Ali
10 lug 2019 11:43:04

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

ShivangiBilora ShivangiBilora
8 ott 2019 13:24:54

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).

Rick Hellewell Rick Hellewell
27 mar 2022 23:46:26

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

wizardzeb wizardzeb
30 giu 2022 04:36:31

Se usato in un plugin, aggiungi ob_clean() ob_start() nel file principale del plugin in cima. Questo codice ha funzionato solo per me.

M.Idrish M.Idrish
27 feb 2023 11:24:12
Mostra i restanti 1 commenti
3

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

1 mag 2013 20:53:18
Commenti

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.

s_ha_dum s_ha_dum
1 mag 2013 21:28:32

Rimuovere get_header() ha funzionato anche per me!

Magico Magico
31 ott 2014 12:01:31

Scommetto che questa sia la causa più comune per la maggior parte delle persone che hanno problemi con wp_redirect che non funziona

joehanna joehanna
25 feb 2019 07:53:49
2

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.

21 mar 2012 16:44:21
Commenti

+1 ottima osservazione sul fatto che wp_redirect sia pluggable

Stephen Harris Stephen Harris
21 mar 2012 16:47:17

grazie....

SANS780730 SANS780730
21 mar 2012 18:49:04
1

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

7 mar 2021 06:25:11
Commenti

Grazie MILLE! Ho provato molte combinazioni con wp_redirect, exit, die, header. Aiutato ob_clean(); ob_start(); all'inizio!

Galina Bublik Galina Bublik
13 set 2022 08:46:25
0

l'intestazione è già stata inviata è la ragione principale. Poiché l'intestazione è già stata inviata, non può essere reinviata e il reindirizzamento fallisce. Utilizza prima dell'intestazione come nell'hook init.

add_action('init', 'your_app_function');
22 lug 2020 10:57:19
0

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;
16 gen 2019 23:33:18
1
if( is_page( ['wfp-dashboard', 'wfp-checkout'] ) ){
   // Verifica se l'utente non è loggato
   if(!is_user_logged_in()){
      @ob_flush();
      @ob_end_flush();
      @ob_end_clean();
      // Reindirizza alla pagina di login
      wp_redirect( wp_login_url() );
      exit();
   }
}
6 ago 2019 09:28:06
Commenti

Puoi includere una spiegazione di come questo risolve il problema? Non sono sicuro del motivo per cui ci sono buffer di output nel codice e hanno l'operatore @, @ non impedisce che si verifichino errori, li nasconde solo dal log degli errori

Tom J Nowell Tom J Nowell
22 lug 2020 11:53:14
0

Ho notato che il plugin W3 Total Cache deve essere attivo per far funzionare questo. Per qualche motivo ha disabilitato il mio.

wp_redirect("/");
exit;
28 dic 2022 19:53:38