Media Uploader:获取已删除的文件

时间:2013-08-28 作者:Michiel Standaert

我目前正在开发一个插件,使用文件上传器将文件上传到wordpress。用户可以保存文件列表,以便在主题的其他位置使用。一切都正常,除了我想删除文件的时候。

我可以使用媒体上传器删除文件,这没有问题。这些文件将在wordpress的后台删除。但是,当文件在媒体上载程序中删除时,我还希望将其从用户当前编辑的列表中删除,这样,当文件在“媒体环境”中不再存在时,就无法将其保存到我的自定义数据库表中。我知道从列表中删除它们需要哪些javascript,但我不知道如何从媒体上传程序中获取删除的文件。

下面是两种可能的解决方案,它们看起来是合乎逻辑的,但我还没有找到正确的方法。

Approach 1

function someFunction() {
    (...)
    file_frame.on(\'select\', handle_upload); //This works
    file_frame.on(\'delete\', handle_delete_media); //perhaps something like this exists?
}
Approach 2 (不确定这是否是一种好方法,因为它需要选择文件)

function handle_upload() {
    var files = file_frame.state().get(\'selection\').toJSON(); //This works
    var files = file_frame.state().get(\'deleted\').toJSON(); //perhaps something like this exists?
    (...)
}
任何帮助都将不胜感激。

EDIT

这是打开媒体上载程序的代码

function open_uploader(e)
{
    e.preventDefault();

    if(file_frame) {
        file_frame.open();
        return;
    }

    file_frame = wp.media.frames.file_frame = wp.media({
        title: \'Select files for your List\',
        multiple: true,
        button: {
            text: \'Insert into List\',
        }
    });

    file_frame.on(\'select\', handle_upload);
    //file_frame.on(\'delete\', handle_media_delete); I NEED SOMETHING LIKE THIS

    file_frame.open();
}
这段代码是将所选文件添加到列表的脚本,它已经可以工作了。这基本上只是一些jQuery代码。

function handle_upload(e)
{
    var files = file_frame.state().get(\'selection\').toJSON();

    jQuery(files).each(function(index, attachment){
        var url = attachment.url.toString();
        var media_id = attachment.id.toString();
        var title = attachment.title.toString();
        var description = attachment.description.toString();
        (...)
    });
}

1 个回复
SO网友:Azizur Rahman

没有看到你的“列表编辑器”代码,我只能提供一个理论上的答案。

在媒体上载程序中删除文件时,我还希望将其从用户当前编辑的列表中删除,这样,当“媒体环境”中不再存在文件时,文件就无法保存到我的自定义数据库表中。我知道从列表中删除它们需要哪些javascript,但我不知道如何从媒体上传程序中获取删除的文件。

在将列表保存到自定义数据库表之前,请快速检查WordPress媒体库和文件系统中是否存在这些媒体文件。

确切的解决方案取决于如何保存到自定义数据库表。如果您正在使用WordPress核心API,那么这可能会帮助您:http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_insert_post_data.

例如:

<?php
function so111965_filter_deleted_handler( $data , $postarr ) {
  // do the filtering of deleted files here
  return $data;
}

add_filter( \'wp_insert_post_data\', \'so111965_filter_deleted_handler\', \'99\', 2 );
?> 

结束

相关推荐

Multi site and media uploader

在我的live博客上,我的多站点似乎有一个奇怪的问题。可能是因为我有一个网站设置为“已删除”-所以我可以编辑它,但公众看不到它?我当前的上载设置如下:wp-content/blogs.dir/10/files这给了我一个链接,例如(链接是真实的,我用example.com替换了我的网站地址):http://example.com/files/2013/01/Screenshot-from-2013-01-04-141248-300x150.png这适用于我拥有的每一个站点,我最近创建了一个新站点,通过上传