Metabox,可将文件上载到自定义目录

时间:2014-01-28 作者:psorensen

我找到了很多关于如何使用wordpress的原生文件上传器创建metabox文件上传器的教程。然而,我想把上传的文件放在一个自定义目录中,我很难找到任何关于它的信息。

有人能提供一些线索吗?提前感谢!

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

我不会关注整个metabox的事情,但只想指出一些关于上传文件夹的“线索”。。

wordpress中的上载目录通过wp_upload_dir() 功能-可过滤。。

$uploads = apply_filters( \'upload_dir\',
array(
    \'path\'    => $dir,
    \'url\'     => $url,
    \'subdir\'  => $subdir,
    \'basedir\' => $basedir,
    \'baseurl\' => $baseurl,
    \'error\'   => false,
) );
稍后由media_sideload_image , 使用wp_handle_upload - 这些可能是您在这些教程中看到的。。。

因此,应用过滤器很简单,因为:

add_filter( \'upload_dir\', \'my_custom_upload_dir_function\' );
请注意,阵列部件必须由您制造和提供。。

您还可以在自定义函数中随时更改上载目录:

$wp_upload_dir =  wp_upload_dir();
$my_sur = "_my_sufrfix";
$my_new_folder = $wp_upload_dir . $my_sur ;
现在,您可以将$my\\u new\\u文件夹用于wp_mkdir_p()

wp_mkdir_p( $my_new_folder );
当然,你需要权限。。

chmod( $my_new_folder, 0644);
我有时使用的另一种方法是简单地应用一些与wp无关的函数,如copy() , rename()unlink()..

$path_parts = pathinfo($file); // we need to know the details ..
// \'dirname :: \' .  $path_parts[\'dirname\'] . "\\n";
// \'basename :: \' .  $path_parts[\'basename\']. "\\n";
// \'extension :: \' .  $path_parts[\'extension\'] . "\\n";
// \'filename :: \' .  $path_parts[\'filename\'] . "\\n"; // since PHP 5.2.0


    // $renamed_dest_path need to be constructed , can be done 
    // manually or with wp_upload_dir()
    if (!copy($file , $renamed_dest_path)) { 
        $debugtext .= "2 : failed to rename  $dest_path_2...\\n";
            }
最后,如果您愿意,您可以@取消原始文件的链接。。。

第二种方法有利弊,我现在不详细介绍。我认为第一种方法更适合在wp中“正常”使用,但第二种方法对于特定情况非常有用。。

结束

相关推荐

Protect Uploads in Multisite

我正在使用WordPress multisite(3.3.1),并试图保护从某些博客上传的内容不被热链接和直接访问。这与How to Protect Uploads, if User is not Logged In?, 但我只想通过服务器上运行的脚本访问上传内容(即,只有服务器可以显示/提供上传服务),因此内容可以受到WordPress用户权限的保护。例如,我有一个名为40c的字段。jpg位于localhost/files/2011/07/40c。jpg;我想让文件显示出来only 在本地域上由HTML