使用从服务器添加通过帖子ID上传

时间:2013-02-17 作者:Ruriko

我正在使用从服务器添加插件http://wordpress.org/extend/plugins/add-from-server/ 基本上,它从服务器导入/上载图像。目前,该插件将图像复制为月/年文件夹格式,但我想通过将其复制为Post ID文件夹格式而不是月/年来进行更改。

我已经尝试使用自定义上传目录插件,但它不能与从服务器添加插件一起使用。任何人都可以调整Add From Server插件,使其通过Post ID上传吗?

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

您可以尝试将此添加到functions.php 文件:

add_filter( \'upload_dir\',\'wpse87234_upload_dir\');
function wpse87234_upload_dir($uploads){

    // check if we are in the "Add From Server" media tab
    if (isset($_REQUEST[\'post_id\']) && isset($_GET[\'tab\']) && $_GET[\'tab\']=="server") {
        $prefix="post_";
        $post_id=(int)$_REQUEST[\'post_id\'];

        // change the uploads info to our needs:
        $uploads[\'subdir\']="/".$prefix.$post_id;
        $uploads[\'path\']=$uploads[\'basedir\'].$uploads[\'subdir\'];
        $uploads[\'url\']=$uploads[\'baseurl\'].$uploads[\'subdir\'];
    }
    return $uploads;    
}
这应该给出如下目录/wp-content/uploads/post_1234/ 具有post_id 1234

SO网友:kaiser

plugins source: 它使用wp_upload_dir()wp_insert_attachment(), 其中使用update_attached_file(). 因此,基本上插件应该只包含您的媒体设置。如果它不这样做,它与其他插件或您的wp配置冲突。php设置。

为救援过滤回调

您仍然可以使用\'upload_dir\'-滤器它采用一个具有以下数据的参数:

array(
    \'path\'    => $dir,
    \'url\'     => $url,
    \'subdir\'  => $subdir,
    \'basedir\' => $basedir,
    \'baseurl\' => $baseurl,
    \'error\'   => false,
)
只需向其添加回调:

add_filter( \'upload_dir\', \'wpse87234_custom_upload_dir\' );
function wpse87234_custom_upload_dir( $data )
{
    // Change everything you need.
    return array_merge( $data, array(
        \'path\'    => $data[\'dir\'],
        \'url\'     => $data[\'url\'],
        \'subdir\'  => $data[\'subdir\'],
        \'basedir\' => $data[\'basedir\'],
        \'baseurl\' => $data[\'baseurl\'],
        \'error\'   => false,
    ) );
}

结束