使用自定义上载文件夹的Media_Handle_Upload?

时间:2018-01-05 作者:Swen

我为阿凡达建立了一个自定义图像上传程序,我真的很喜欢media_handle_upload() 创建不同大小的图像。因为它们是化身,而不是帖子的数据,我不希望它们被放在默认的WordPress上传文件夹中。

是否可以继续使用media_handle_upload() 同时定义自定义上载文件夹?

1 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

如果我没弄错的话,那应该是可能的。您要使用media_handle_upload(), 哪个呼叫wp_handle_upload() 处理文件上载。wp_handle_upload() on本身不会有帮助,尤其是因为它几乎只是_wp_handle_upload(). 还没有结束,因为里面_wp_handle_upload() 功能wp_upload_dir() 就是我们找到钩子的地方upload_dir:

/**
 * Filters the uploads directory data.
 *
 * @since 2.0.0
 *
 * @param array $uploads Array of upload directory data with keys of \'path\',
 *                       \'url\', \'subdir, \'basedir\', and \'error\'.
 */
$uploads = apply_filters( \'upload_dir\', $cache[ $key ] );
Theupload_dir 过滤器可用于更改上载路径。为此,我们需要一个函数:

function wpse_custom_upload_dir( $dir_data ) {
    // $dir_data already you might want to use
    $custom_dir = \'custom\';
    return [
        \'path\' => $dir_data[ \'basedir\' ] . \'/\' . $custom_dir,
        \'url\' => $dir_data[ \'url\' ] . \'/\' . $custom_dir,
        \'subdir\' => \'/\' . $custom_dir,
        \'basedir\' => $dir_data[ \'error\' ],
        \'error\' => $dir_data[ \'error\' ],
    ];
}
然后你可以这样使用它:

// changing the directory
add_filter( \'upload_dir\', \'wpse_custom_upload_dir\' );
// uploading
$upload = media_handle_upload( \'some_upload\', $post_id );
// remove so it doesn\'t apply to all uploads
remove_filter( \'upload_dir\', \'wpse_custom_upload_dir\' );
所有这些或多或少都是示范性的,但我相信你明白其中的道理。有关更多详细信息,请查看我链接的文档页面,在那里您还可以浏览源代码。

结束

相关推荐

撤消定义(‘UPLOADS’,‘’.‘FILES’);以重指向“wp-Content/Uploads”文件夹

是否可以通过使用将“wp content/uploads”设置为使用不同的文件夹define( \'UPLOADS\', \'\'.\'files\' ); 我已经永久有效地更改了所有路径,如果是这样的话,我如何撤消它,使其指向“wp内容/上传”?我认为只要把define( \'UPLOADS\', \'\'.\'files\' ); 我会解决一个问题,我上传到WP的文件不想下载,因为URL不是文件的正确路径。