web-dev-qa-db-fra.com

la fonction wp_redirect () ne fonctionne pas

wp_redirect($post->guid) ne fonctionne pas. Comment puis-je réparer cela?

Ceci est mon code:

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',
      // NOW IT'S ALREADY AN ARRAY

    );

    $post_id = wp_insert_post($new_post);

    // This will redirect you to the newly created post
    $post = get_post($post_id);
    $url=$post->guid;

    wp_redirect($post->guid);

} 
6
SANS780730

Deux choses ne vont pas ici:

  1. N'utilisez pas $post->guid comme une URL
  2. Vous devez exit() après avoir utilisé wp_redirect() ( voir le Codex )

    wp_redirect() ne se ferme pas automatiquement et devrait presque toujours être suivi d'une sortie.

//..... code as in question
$post_id = wp_insert_post($new_post);
$url = get_permalink( $post_id );
wp_redirect($url);
exit();
20
Stephen Harris

Je ne sais pas si cela va aider ... mais j'ai constaté que j'avais un code dans un modèle et que je commençais par get_header () de la manière suivante:

<?php
/**
 * .. Template comments
 */

 get_header();

 if(...) {
    ...
    if(...) {
      ...
      wp_redirect($url);
      exit();
    }
 }
 ?>

et recevait le même problème d'en-tête déjà envoyé ... Ce que j'ai fait était de déplacer get_header () à la fin du bloc et le tour est joué !!!

<?php
/**
 * .. Template comments
 */


 if(...) {
    ...
    if(...) {
      ...
      wp_redirect($url);
      exit();
    }
 }
 get_header();
 ?>

Aucun plugin n'a été désactivé. et tout était ok ... vous pouvez essayer si cela fonctionne pour vous

7
user6181996

N'utilisez jamais la valeur post GUID, il ne doit pas nécessairement correspondre à l'URL réelle de la publication.

http://codex.wordpress.org/Changing_The_Site_URL#Important_GUID_Note

wp_redirect( get_permalink( $post_id ) );
exit(); // always exit

Assurez-vous également que wp_redirect n'est pas branché par quelque chose d'autre qui l'empêche de faire son travail correctement. Désactivez tous les plugins et revenez à Twenty Ten/Eleven pour vérifier.

5
soulseekah

J'ai une solution simple, s'il vous plaît lisez:

  1. Si vous utilisez wp_redirect($url) dans les fichiers de thème et que cela ne fonctionne pas, ajoutez ob_clean() ob_start() dans votre fichier de fonction en haut.

  2. Si vous utilisez in plugin, ajoutez ob_clean() ob_start() dans le fichier de plugin principal en haut.

Et assurez-vous que vous avez ajouté exit() function after wp_redirect($url) Comme ceci:

$url = 'http://example.com';
wp_redirect($url);
exit();
5
yogesh

Assurez-vous de ne pas avoir: get_header(); ou une fonction wordpress susceptible de créer des contenus tels que l'en-tête et le pied de page dans votre modèle. Sinon, la redirection ne fonctionnera pas.

Certains développeurs tentent d'effacer la page en utilisant ob_start();, mais si vous avez du contenu dans votre page, même si vous utilisez ob_start();, la redirection ne fonctionnera pas.

et puis essayez simplement ce code:

wp_redirect(get_permalink($post->ID));
exit;
0
Fury