WordPress上传图片时自动将图片重命名为文章标题

  • 一一得一
  • 技术分享
  • Jul 03, 2022

为 WordPress 文章上传添加图片时自动重命名图片名称,可以简化操作过程序,也可以用时间或者MD5生成数字重命名所有媒体文件。
将下面代码添加到当前主题函数模板functions.php中:

代码一,按时间重命名

上传文件时会以“年月日时分秒+千位毫秒整数”的格式重命名文件,如“20161023122221765.jpg”文章源自知更鸟-https://zmingcx.com/wordpress-upload-file-renaming.html


 
  1. // wordpress上传文件重命名
  2. function git_upload_filter($file) {
  3. $time = date("YmdHis");
  4. $file['name'] = $time . "" . mt_rand(1, 100) . "." . pathinfo($file['name'], PATHINFO_EXTENSION);
  5. return $file;
  6. }
  7. add_filter('wp_handle_upload_prefilter', 'git_upload_filter');


文章源自知更鸟-https://zmingcx.com/wordpress-upload-file-renaming.html

代码二,用MD5加密生成数字并重命名

名称规则是由系统自动生成的一个32位的MD5加密文件名,由于默认生成的32位文件名有点长,所以使用substr(md5($name), 0, 20) 截断将其设置为20位。文章源自知更鸟-https://zmingcx.com/wordpress-upload-file-renaming.html


 
  1. function rename_filename($filename) {
  2. $info = pathinfo($filename);
  3. $ext = empty($info['extension']) ? '' : '.' . $info['extension'];
  4. $name = basename($filename, $ext);
  5. return substr(md5($name), 0, 20) . $ext;
  6. }
  7. add_filter('sanitize_file_name', 'rename_filename', 10);

 


代码三,重命名为文章标题

文章源自知更鸟-https://zmingcx.com/upload-image-renamed-to-article-title.html


 
  1. function file_renamer( $filename ) {
  2. $info = pathinfo( $filename );
  3. $ext = empty( $info['extension'] ) ? '' : '.' . $info['extension'];
  4. $name = basename( $filename, $ext );
  5. if( $post_id = array_key_exists( "post_id", $_POST) ? $_POST["post_id"] : null ) {
  6. if($post = get_post($post_id)) {
  7. return $post->post_title . $ext;
  8. }
  9. }
  10.  
  11. $my_image_title = $post;
  12. $file['name'] = $my_image_title . - uniqid() . $ext; // uniqid method
  13. // $file['name'] = md5($name) . $ext; // md5 method
  14. // $file['name'] = base64_encode( $name ) . $ext; // base64 method
  15. return $filename;
  16. }
  17.  
  18. add_filter( 'sanitize_file_name', 'file_renamer', 10, 1 );
  19.  
  20. // 上传时自动设置图像标题、替代文本、标题和描述
  21. add_action( 'add_attachment', 'my_set_image_meta_upon_image_upload' );
  22. function my_set_image_meta_upon_image_upload( $post_ID ) {
  23.  
  24. // 检查上传的文件是否是图片
  25. if ( wp_attachment_is_image( $post_ID ) ) {
  26.  
  27. if( isset( $_REQUEST['post_id'] ) ) {
  28. $post_id = $_REQUEST['post_id'];
  29. } else {
  30. $post_id = false;
  31. }
  32.  
  33. if ( $post_id != false ) {
  34. $my_image_title = get_the_title( $post_id );
  35. } else {
  36. $my_image_title = get_post( $post_ID )->post_title;
  37. }
  38.  
  39. // 清理标题中特殊字符
  40. $my_image_title = preg_replace( '%\s*[-_\s]+\s*%', ' ', $my_image_title );
  41.  
  42. // 将第一个字母大写
  43. $my_image_title = ucwords( strtolower( $my_image_title ) );
  44.  
  45. // 创建包含标题、说明、描述的数组
  46. $my_image_meta = array(
  47. 'ID' => $post_ID, // ID
  48. 'post_title' => $my_image_title, // 图像标题
  49. 'post_excerpt' => $my_image_title, // 图像说明
  50. 'post_content' => $my_image_title, // 图像描述
  51. );
  52.  
  53. // 添加图像 Alt
  54. update_post_meta( $post_ID, '_wp_attachment_image_alt', $my_image_title );
  55.  
  56. // 添加标题、说明、描述
  57. wp_update_post( $my_image_meta );
  58. }
  59. }

文章源自知更鸟-https://zmingcx.com/wordpress-upload-file-renaming.html

提示:上面的方法只适合在文章编辑页面使用,如果在媒体库上传无效。另外,图片名称为中文貌似有的主机环境并不支持。

打赏
  • 相关推荐