wp_redirect无法正常工作

时间:2013-01-12 09:49:31

标签: php redirect wordpress-theming wordpress

我正在尝试发布到一个页面并在帖子中进行一些wordpress插入但不知何故重定向不起作用,之后。我尝试了以下三个选项:

  1. wp_redirect($位置);
  2. wp_safe_redirect($位置);
  3. 头( '位置:http://示例.com');
  4. 这就是我想要做的事情:

    1. 发布到另一页。
    2. 查找要上传的文件并上传目录
    3. 上传文件。
    4. 使用set_post_thumbnail
    5. 设置发布缩略图
    6. 重定向到所需的页面。
    7. 脚本工作直到设置缩略图然后死掉。 如果有人想用它来从模板前端上传缩略图,他们就可以使用它。


      // if you have this in a file you will need to load "wp-load.php" to get access to WP functions. If you post to "self" with this code then WordPress is by default loaded
          require $_SERVER['DOCUMENT_ROOT'] . "/wp-load.php";
          // require two files that are included in the wp-admin but not on the front end. These give you access to some special functions below.
          require $_SERVER['DOCUMENT_ROOT'] . "/wp-admin/includes/file.php";
          require $_SERVER['DOCUMENT_ROOT'] . "/wp-admin/includes/image.php";
      
          // required for wp_handle_upload() to upload the file
          $upload_overrides = array( 'test_form' => FALSE );
      
          global $current_user;
          get_currentuserinfo();
          $logged_in_user = $current_user->ID;
      
          //get user POST information
          global $post;
          $loop = new WP_Query( array( 
                                  'posts_per_page' => 1, 
                                  'post_type' => "vet-profile", 
                                  'order' => "ASC", 
                                  'orderby' => "menu_order", 
                                  'author'=>"$logged_in_user"
                              )
          );
          while ( $loop->have_posts() ): $loop->the_post();
              $current_postID = $post->ID;
              $current_posttitle = get_the_title(); 
          endwhile;   
      
          // count how many files were uploaded
          $upload_files = $_FILES[ 'upload_files' ];
      
          // load up a variable with the upload direcotry
          $uploads = wp_upload_dir();
      
          // foreach file uploaded do the upload
          //foreach ( range( 0, $count_files ) as $i ) 
          //{
              // create an array of the $_FILES for each file
              $file_array = array(
                  'name' => $_FILES['upload_files']['name'],
                  'type'  => $_FILES['upload_files']['type'],
                  'tmp_name'  => $_FILES['upload_files']['tmp_name'],
                  'error' => $_FILES['upload_files']['error'],
                  'size'  => $_FILES['upload_files']['size'],
              );
      
              // check to see if the file name is not empty
              if ( !empty( $file_array['name'] ) ) 
              { ?>
           <?php
                  // upload the file to the server
                  $uploaded_file = wp_handle_upload( $upload_files, $upload_overrides );
      
                  if ( $uploaded_file ) 
                  {
                      echo '<script>alert("Image successfully uploaded.\n");</script>';
                  } 
                  else 
                  {
                      echo '<script>alert("Fish! some error occured. Please try again.");</script>';
                  } 
      
                  // checks the file type and stores in in a variable
                  $wp_filetype = wp_check_filetype( basename( $uploaded_file['file'] ), null );   
      
                  // set up the array of arguments for "wp_insert_post();"
                  $attachment = array(
                      'post_mime_type' => $wp_filetype['type'],
                      'post_title' => preg_replace('/\.[^.]+$/', '', basename( $uploaded_file['file'] ) ),
                      'post_content' => '',    
                      'post_author' => $logged_in_user,
                      'post_status' => 'inherit',
                      'post_type' => 'attachment',
                      'post_parent' => $current_postID,
                      'guid' => $uploads['url'] . '/' . $file_array['name']
                  );
      
      
                  // insert the attachment post type and get the ID
                  $attachment_id = wp_insert_attachment( $attachment, $uploaded_file['file'], $current_postID );
      
                  // generate the attachment metadata
                  $attach_data = wp_generate_attachment_metadata( $attachment_id, $uploaded_file['file'] );
      
                  // update the attachment metadata
                  wp_update_attachment_metadata( $attachment_id, $attach_data);
      
                  // set thumbnail to the current post
                  set_post_thumbnail( $current_postID, $attachment_id );
      
                  echo '<script>alert("set thumbnail")';
                  $location = empty($_POST['redirect_to']) ? get_redirect_link() : $_POST['redirect_to'];
                  wp_safe_redirect( $location ); 
                  echo '<script>alert("End Loop");</script>';
              }
      

      先谢谢

2 个答案:

答案 0 :(得分:2)

我发现我可以可靠地调用wp_redirect的唯一地方是init动作挂钩(http://codex.wordpress.org/Plugin_API/Action_Reference/init)的回调函数,因为它在文档中明确指出:< / p>

  

在WordPress完成加载但在任何标题之前运行   发送。用于拦截$ _GET或$ _POST触发器。

你可能想看看这个。您可能想要尝试的另一件事,如果这对您不起作用,则使用输出缓冲。这是一个关于如何做到这一点的简洁教程:

http://tommcfarlin.com/wp_redirect-headers-already-sent/

答案 1 :(得分:0)

    echo '<script>alert("set thumbnail")';
    $location = empty($_POST['redirect_to']) ? get_redirect_link() : $_POST['redirect_to'];
    wp_safe_redirect( $location ); 
    echo '<script>alert("End Loop");</script>';

以上代码肯定不会起作用。在向输出写入内容后,您无法重定向。我没有检查剩下的代码,但如果它按照你说的方式工作,删除顶行和底行(或者只删除顶行)应该可以完成所有工作:

$location = empty($_POST['redirect_to']) ? get_redirect_link() : $_POST['redirect_to'];
wp_safe_redirect( $location );

(如果在wp-config.php中启用调试模式,您应该看到错误消息而不是白屏。所以如果这不起作用,您可以在此处复制错误,我们可以准确地知道问题是。)