在WordPress中更改特定文件的上传路径

Changing the upload path of a specific file in WordPress

提问人:Benjamin 提问时间:11/9/2023 更新时间:11/9/2023 访问量:44

问:

我希望每次将 PDF 文件上传到我的网站时,我的文件将保存在不同的路径中,而不是默认的 WordPress 路径。

为此,我在文件中放置了以下过滤器:functions.php

function custom_upload_directory( $file ) {
    // Check if the file is a PDF
    if ( $file['type'] == 'application/pdf' ) {
        // Set the upload directory to a custom location
         $file['url'] = '/wp-content/uploads/test-for-pdf/' . $file['name'];
        $file['error'] = false;
    }
 
    return $file;
}

add_filter( 'wp_handle_upload_prefilter', 'custom_upload_directory' );

通过放置此过滤器,PDF 文件在 WordPress 中正确上传,但它保存在其默认路径中,并且没有文件上传到我想要的路径中。

php wordpress

评论


答:

0赞 Paul Allsopp 11/9/2023 #1

根据我对 WP 上wp_handle_upload_prefilter页面的阅读(我不使用),您没有选择更改该过滤器中的路径,只有名称。

默认位置是在引导过程中定义的,我建议不要搞砸它。相反,请使用插件,或编写 cron 脚本来移动文件。

请参见:https://devowl.io/knowledge-base/real-physical-media-change-wp-content-uploads-folder/

评论

0赞 Benjamin 11/9/2023
我不想更改我上传的所有文件的路径。只有像 PDF 这样的特殊文件才能与所有其他文件分开上传,并且永远只能在同一路径中上传。
1赞 Moshe Gross 11/9/2023 #2

您可以尝试以下方法,尽管我还没有测试过。

function custom_upload_directory( $file ) {
    // Check if the file is a PDF
    if ( $file['type'] == 'application/pdf' ) {
        // Set the upload directory to a custom location
         add_filter( 'upload_dir', 'pdf_upload_dir' );
    }
 
    return $file;
}

add_filter( 'wp_handle_upload_prefilter', 'custom_upload_directory' );

function pdf_upload_dir($param){
    $mydir = '/test-for-pdf';
    $param['path'] = $param['basedir'] . $mydir;
    $param['url']  = $param['baseurl'] . $mydir;
    remove_filter( 'upload_dir', 'pdf_upload_dir' );
    return $param;
}

评论

1赞 Benjamin 11/9/2023
是的,它工作正常。非常感谢您抽出宝贵时间,感谢您为我编写的这篇非常好的代码。