最近模板兔给某个客户二次开发时,需要对前台工单里上传的图片单独放入一个ticket文件夹且也走媒体库逻辑。比如默认上传到媒体库是wp-content/upload/2026/06/目录,我这个前台上传工单图片到wp-content/upload/ticket/2026/06/目录。
前台原始上传代码:
if ( ! function_exists( 'wp_handle_upload' ) ) { require_once( ABSPATH . 'wp-admin/includes/file.php' ); } $upload = wp_handle_upload($_FILES['imageFile'], array('test_form' => false)); if ($upload && !isset($upload['error'])) { $attachment = array( 'guid' => $upload['url'], 'post_mime_type' => $upload['type'], 'post_title' => preg_replace('/\.[^.]+$/', '', basename($upload['file'])), 'post_content' => '', 'post_status' => 'inherit' ); $attachment_id = wp_insert_attachment($attachment, $upload['file']); if (!is_wp_error($attachment_id)) { require_once( ABSPATH . 'wp-admin/includes/image.php' ); // 生成元数据并更新附件 $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload['file']); wp_update_attachment_metadata($attachment_id, $attachment_data); $image = wp_get_attachment_url($attachment_id); $error = 0; } }
修改后的代码:
if ( ! function_exists( 'wp_handle_upload' ) ) {
require_once( ABSPATH . 'wp-admin/includes/file.php' );
}
add_filter('upload_dir', function($upload) {
$custom_subdir = '/ticket' . $upload['subdir'];
$upload['path'] = $upload['basedir'] . $custom_subdir;
$upload['url'] = $upload['baseurl'] . $custom_subdir;
$upload['subdir'] = $custom_subdir;
return $upload;
}, 99);
$upload = wp_handle_upload($_FILES['file'], array('test_form' => false));
// 上传完立即移除过滤器,不影响其他代码
remove_filter('upload_dir', 99);
if ($upload && !isset($upload['error'])) {
$attachment = array(
'guid' => $upload['url'],
'post_mime_type' => $upload['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($upload['file'])),
'post_content' => '',
'post_status' => 'inherit'
);
$attachment_id = wp_insert_attachment($attachment, $upload['file']);
if (!is_wp_error($attachment_id)) {
require_once( ABSPATH . 'wp-admin/includes/image.php' );
// 生成元数据并更新附件
$attachment_data = wp_generate_attachment_metadata($attachment_id, $upload['file']);
wp_update_attachment_metadata($attachment_id, $attachment_data);
$image = wp_get_attachment_url($attachment_id);
$error = 0;
}
}


0 个评论