web-dev-qa-db-ja.com

wp_redirect()関数が機能していない

wp_redirect($post->guid)が機能していません。どうすればこれを修正できますか?

これは私のコードです:

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

ここで間違っていることが2つあります。

  1. $post->guidをURLとして使用しないでください
  2. exit()を使用した後は、 must wp_redirect()を使用する必要があります( コーデックスを参照

    wp_redirect()は自動的には終了せず、ほとんどの場合はexitの後に続きます。

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

これでうまくいくかどうかはわかりませんが、テンプレートにコードがいくつかあり、get_header()から始めていることがわかりました。

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

 get_header();

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

そして、以前に送信されたのと同じ問題を抱えていました...私がしたのは、単にget_header()をブロックの最後に移動するだけでした。

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


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

無効にされたプラグインはありません。そして、すべてが問題なかった...これがあなたのために働くならば、あなたは試みをするかもしれません

7
user6181996

Post GUIDの値を決して使用しないでください。投稿の実際のURLと一致する必要はありません。

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

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

また、wp_redirectが他のものによってプラグされていないと、正しく機能しません。すべてのプラグインを無効にして、Twenty Ten/Elevenに戻って確認してください。

5
soulseekah

私は簡単な解決策を持っています、読んでください:

  1. テーマファイルでwp_redirect($url)を使用していて、それが機能していない場合は、関数ファイルにob_clean() ob_start()を追加してください。

  2. プラグインで使用する場合は、一番上のメインプラグインファイルにob_clean() ob_start()を追加してください。

そして、exit() function after wp_redirect($url)を次のように追加したことを確認してください。

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

get_header();や、テンプレート内にヘッダーやフッターなどのコンテンツを作成する可能性のあるワードプレス関数がないことを確認してください。そうでなければ、リダイレクトは機能しません。

ob_start();を使用してページをクリアしようとする開発者もいますが、ob_start();を使用してもページにコンテンツがある場合、リダイレクトは機能しません。

そして、このコードを試してみてください。

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