[英]Rename and overwrite uploaded files
我使用以下代码将图片上传到 Wordpress
function custom_upload_name($filename)
{
$info = pathinfo($filename);
$item_id = $_POST['item_id'];
$filename = $item_id . '.jpg';
return $filename;
}
add_filter('sanitize_file_name', 'custom_upload_name', 10);
if ( ! function_exists( 'wp_handle_upload' ) ) require_once( ABSPATH . 'wp-admin/includes/file.php' );
$item_id = $_POST['item_id'];
$uploadedfile = $_FILES['file'];
$image_name = $item_id;
$upload_overrides = array( 'test_form' => false );
$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
if ( $movefile ) {
//file is uploaded successfully. do next steps here.
echo $location_home .'/images/' .$image_name . '.jpg';
}
文件的重命名工作正常。 但是我选择相同的图像两次上传一切都很好,但是如果我选择不同的图像上传,Wordpress 会自动向文件添加一个数字:
如何让 Wordpress 自动覆盖具有相同 id 的文件,而不会给文件添加额外的数字?
使用这段代码, unique_filename_callback
是回调函数,这个函数被wordpress自动调用。 所以我们可以覆盖同名的文件。
$upload_overrides = array( 'test_form' => false,'unique_filename_callback' => 'my_cust_filename' );
// You codes
function my_cust_filename($dir, $name, $ext){
return $name.$ext;
}
我发现 hack :在 wp_handle_upload 之前重命名文件。
$_FILES['myfile']['name'] = uniqid( 'file' ) . '.' . pathinfo( $_FILES['myfile']['name'] ) ['extension'];
$upload_overrides = [ 'test_form' => false ];
$movefile = wp_handle_upload( $_FILES['myfile']['name'], $upload_overrides );
遗憾的是我没有足够的声誉来发表评论,但是公认的解决方案是错误的。
函数中的$ext
参数已经在其中加了点 ,因此正确的代码是:
$upload_overrides = array( 'test_form' => false,'unique_filename_callback' => 'my_cust_filename' );
// You codes
function my_cust_filename($dir, $name, $ext){
return $name.$ext;
}
这是您上传带有随机名称的 pdf 或图像文件的方式
<?php
function custom_upload_name($filename)
{
$info = pathinfo($filename);
echo 'info:'. $info . "\n";
$ext=$info['extension'];
$filename = rand(1,1000) .".".$ext;
echo $filename . "\n";
return $filename;
}
if ( ! function_exists( 'wp_handle_upload' ) ) {
require_once( ABSPATH . 'wp-admin/includes/file.php' );
}
if(isset($_FILES['fileToUpload']))
{
$uploadedfile = $_FILES['fileToUpload'];
echo $uploadedfile[name].' '. $uploadedfile[type].' '.$uploadedfile[tmp_name].' ';
$_FILES['fileToUpload']=null; //removing file
// *********************** Overriding parameter ***********************
$upload_overrides = array( 'test_form' => false, 'mimes' => array(// Image formats
'jpg|jpeg|jpe' => 'image/jpeg',
'gif' => 'image/gif',
'png' => 'image/png',
'bmp' => 'image/bmp',
'tif|tiff' => 'image/tiff',
'ico' => 'image/x-icon',
//pdf
'pdf' => 'application/pdf'
)
);
add_filter('sanitize_file_name', 'custom_upload_name', 10);
$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
if ( $movefile && ! isset( $movefile['error'] ) ) {
echo "File is valid, and was successfully uploaded.\n";
var_dump( $movefile );
} else {
/**
* Error generated by _wp_handle_upload()
* @see _wp_handle_upload() in wp-admin/includes/file.php
*/
echo $movefile['error'];
}
}
?>
这是 HTML
<form action="#" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload file" name="submit">
</form>
如果其他人有同样的问题,只需发布这个。
由于某种原因,如果我将其传递给wp_handle_upload
,则覆盖不起作用,如下所示:
$overrides['unique_filename_callback'] = 'my_unique_filename_callback';
wp_handle_upload($upload_file, $overrides)
但是,当我尝试使用wp_handle_upload_overrides
过滤器修改它时,以下代码有效,如下所示:
function wp_handle_upload_overrides($overrides, $file) {
//$overrides['test_form'] = false;
$overrides['unique_filename_callback'] = 'my_unique_filename_callback';
return $overrides;
}
add_filter( 'wp_handle_upload_overrides', 'wp_handle_upload_overrides', 10, 2 );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.