如何修改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
相关产品推荐
相关产品推荐

