在Wordpress后端上传期间重命名文件

gea*_*tal 14 wordpress plugins file-rename

有没有办法在Wordpress 3.0后端的上传进程中重命名文件?我想对文件进行一致的命名,特别是对于图像.

我认为原始文件名的12(+ - )数字哈希值或类似的东西会很棒.有什么建议?

问候

The*_*dic 30

但在上传文件之前,这样做会更容易.

不太确定 - 这似乎相当容易;

/**
 * @link http://stackoverflow.com/a/3261107/247223
 */
function so_3261107_hash_filename( $filename ) {
    $info = pathinfo( $filename );
    $ext  = empty( $info['extension'] ) ? '' : '.' . $info['extension'];
    $name = basename( $filename, $ext );

    return md5( $name ) . $ext;
}

add_filter( 'sanitize_file_name', 'so_3261107_hash_filename', 10 );
Run Code Online (Sandbox Code Playgroud)

此过滤器创建原始文件名的32个字符的散列,保留文件扩展名.如果你愿意的话,你可以用它来剁下substr()来.

一旦文件上传到服务器上的临时目录,但在调整大小(如果适用)并保存到uploads文件夹之前,此过滤器就会运行.

请注意,不存在文件覆盖的风险 - 如果新散列的文件与已存在的文件相同,WordPress将尝试将增量数字附加到文件名,直到不再发生冲突.

WordPress插件

<?php

/**
 * Plugin Name: Hash Upload Filename
 * Plugin URI:  http://stackoverflow.com/questions/3259696
 * Description: Rename uploaded files as the hash of their original.
 * Version:     0.1
 */

/**
 * Filter {@see sanitize_file_name()} and return an MD5 hash.
 *
 * @param  string $filename
 * @return string
 */
function so_3261107_hash_filename( $filename ) {
    $info = pathinfo( $filename );
    $ext  = empty( $info['extension'] ) ? '' : '.' . $info['extension'];
    $name = basename( $filename, $ext );

    return md5( $name ) . $ext;
}

add_filter( 'sanitize_file_name', 'so_3261107_hash_filename', 10 );
Run Code Online (Sandbox Code Playgroud)

  • 我已经对我的答案进行了更新 - 将代码保存为文件中的`hash-upload.php`并将其弹出到你的插件文件夹中:) (2认同)

Pab*_*eco 5

我已经为它做了一个插件。我这样做是因为我的客户在尝试上传带有特殊字符的图像时遇到了太多麻烦

http://wordpress.org/plugins/file-renaming-on-upload


小智 5

http://wpapi.com/change-image-name-to-wordpress-post-slug-during-upload/

顺便提一句:

添加过滤器sanitize_file_name是完全错误的,因为sanitize_file_name()函数是格式化字符串的辅助函数,它可以在其他地方使用,如插件或主题。

function wp_modify_uploaded_file_names($file) {
    $info = pathinfo($file['name']);
    $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
    $name = basename($file['name'], $ext);

    $file['name'] = uniqid() . $ext; // uniqid method
    // $file['name'] = md5($name) . $ext; // md5 method
    // $file['name'] = base64_encode($name) . $ext; // base64 method

    return $file;
}

add_filter('wp_handle_upload_prefilter', 'wp_modify_uploaded_file_names', 1, 1);
Run Code Online (Sandbox Code Playgroud)