首先将媒体附加到帖子而不进行自动保存

时间:2012-07-20 05:37:30

标签: wordpress media autosave

使用WordPress,我使用wp_editor来允许用户使用编辑器和媒体上传器。我想避免创建帖子的自动保存,但问题是在保存帖子之前附件没有要附加的post_id。

我想知道是否有办法上传媒体,然后在保存后将其附加到新帖子。

我可以将临时ID传递给附件,以便在保存帖子时识别它吗?或者也许在上传后获取附件ID?

赞赏的想法!

2 个答案:

答案 0 :(得分:0)

经过多次大惊小怪,我得出的结论是预先发布帖子ID是必要的。

我最终做了WordPress Post Edit屏幕的功能。一旦用户输入帖子标题,我就使用了一点jQuery和Ajax来动态创建自动保存。

自动保存完成后,它会将媒体上传iframe href替换为包含自动保存帖子ID的媒体。

所以,仍然有可能会有一些废弃的帖子草稿,但至少需要通过输入帖子标题来做一点承诺。

答案 1 :(得分:0)

您可以创建未附加的媒体,然后将其附加到帖子中:

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class FileUploadController {

    @RequestMapping(value="/upload", method=RequestMethod.GET)
    public @ResponseBody String provideUploadInfo() {
        return "You can upload a file by posting to this same URL.";
    }

    @RequestMapping(value="/upload", method=RequestMethod.POST)
    public @ResponseBody String handleFileUpload(@RequestParam("name") String name,
            @RequestParam("file") MultipartFile file){
        if (!file.isEmpty()) {
            try {
                byte[] bytes = file.getBytes();
                BufferedOutputStream stream =
                        new BufferedOutputStream(new FileOutputStream(new File(name)));
                stream.write(bytes);
                stream.close();
                return "You successfully uploaded " + name + "!";
            } catch (Exception e) {
                return "You failed to upload " + name + " => " + e.getMessage();
            }
        } else {
            return "You failed to upload " + name + " because the file was empty.";
        }
    }

}

然后加上它:

function file_into_database( $filetype, $filename, $target )
{
    $title = $this->clean_file_info[ 'basename' ];

    $attachment = array
    (
          'post_mime_type' => $filetype
        , 'post_title'     => $title
        , 'post_content'   => ''
        , 'post_status'    => 'inherit'
        , 'guid'           => $target[ 'uri' ]
        , 'post_author'    => $this->author
    );


    $attach_id = wp_insert_attachment( $attachment, $target[ 'path' ] );


    $attach_data = wp_generate_attachment_metadata( $attach_id, $target[ 'path' ] );
    wp_update_attachment_metadata( $attach_id,  $attach_data );

    return $attach_id;
}

我刚刚在一个插件中发现了这个,没有找到它的记录,所以我不知道是否有任何副作用,但我还没有碰到任何副作用。另请注意,如果帖子最终没有发布,您将无法获得延迟的自动保存,但您可能会收到延迟的附件,因此您可能需要在将来某个时间安排删除并取消当帖子被保存的时候。