You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改WordPress代码实现上传PDF后立即自动复制至指定目录

解决方案:实现PDF文件上传后自动复制到指定路径

原代码依赖after_switch_theme钩子,仅在切换主题时执行文件复制操作。要实现文件上传后立即触发复制,我们可以改用WordPress的add_attachment钩子(该钩子在附件上传成功后立即触发),同时优化逻辑直接处理当前上传的文件,无需遍历整个文件夹。

修改后的代码如下:

function auto_copy_pdf_on_upload( $attachment_id ) {
    // 获取上传附件的文件路径
    $file_path = get_attached_file( $attachment_id );
    // 检查文件是否为PDF格式
    if ( pathinfo( $file_path, PATHINFO_EXTENSION ) !== 'pdf' ) {
        return;
    }

    // 定义目标存储目录
    $wordPress_directory = WP_CONTENT_DIR . '/languages/themes';
    // 确保目标目录存在,不存在则创建
    if ( !is_dir( $wordPress_directory ) ) {
        wp_mkdir_p( $wordPress_directory );
    }

    // 生成目标文件的完整路径
    $destination_file = $wordPress_directory . '/' . basename( $file_path );
    // 检查目标文件是否已存在,不存在则执行复制
    if ( !file_exists( $destination_file ) ) {
        copy( $file_path, $destination_file );
    }
}
add_action( 'add_attachment', 'auto_copy_pdf_on_upload' );

关键改动说明

  • 钩子替换:用add_attachment替代after_switch_theme,实现上传完成后立即触发复制操作
  • 精准处理:直接针对当前上传的附件判断格式并复制,避免遍历整个文件夹的性能损耗
  • 格式校验:增加PDF格式判断,确保只处理目标类型文件,避免误操作

如果需要仅监控指定上传子目录(比如原代码中的test-for-pdf)的文件,可以在函数开头添加路径校验逻辑:

$upload = wp_upload_dir();
$target_upload_subdir = $upload['basedir'] . '/test-for-pdf';
// 检查当前上传文件是否在指定子目录内,不在则直接返回
if ( strpos( $file_path, $target_upload_subdir ) !== 0 ) {
    return;
}

内容的提问来源于stack exchange,提问作者Wp-PHP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 17:02:34