如何在上传时从WordPress后端和前端更改媒体文件的名称?

时间:2016-01-22 05:03:01

标签: php wordpress

假设我上传了一个例如图片的媒体文件,其名称为example_123_56737_303030.png,但在上传之前我希望将此图片名称更改为我选择的任何内容(最好是此附件的post_id)所以它看起来像122.png(122是这个附件的post_id)。

现在需要实现的目标是:

  1. 当我从后端/前端直接上传文件/直接在媒体/在帖子/在页面/任何自定义帖子类型(意味着媒体是从wordpress网站的任何地方上传)时,名称应该更改。< / LI>
  2. wordpress为每个图片保存的序列化数据,_wp_attached_file_wp_attachment_metadata表中的wp_post_meta应该是新名称。
  3. 图片也应该是文件夹中的新名称(上传 place / directory很好,不需要更改)。

1 个答案:

答案 0 :(得分:0)

将以下代码放入 functions.php

function handle_uploadedimage($arr) {

        // Get the parent post ID, if there is one
        if( isset($_REQUEST['post_id']) ) {
            $post_id = $_REQUEST['post_id'];
        } else {
            $post_id = false;
        }

        // Only do this if we got the post ID--otherwise they're probably in
        //  the media section rather than uploading an image from a post.

        if($post_id && is_numeric($post_id)) {

            // Get the post slug
            $post_obj  = get_post($post_id); 
            $post_slug = $post_obj->post_name;

            // If we found a slug
            if($post_slug) {
                $random_number = rand(10000,99999);
                $ext = pathinfo($arr['name'], PATHINFO_EXTENSION);
                $arr['name'] = $post_slug . '-' . $random_number . '.'.$ext;
            }
        }
        return $arr;
    }
    add_filter('wp_handle_upload_prefilter', 'handle_uploadedimage', 1, 1);

您也可以尝试以下版本

function handle_uploadedimage($arr) {

        $random_number = md5(rand(10000,99999));
        $ext = pathinfo($arr['name'], PATHINFO_EXTENSION);
        $arr['name'] = $random_number .'.'.$ext;

        return $arr;
    }
    add_filter('wp_handle_upload_prefilter', 'handle_uploadedimage', 1, 1);

你也可以尝试这个插件wordpress.org/plugins/file-renaming-on-upload/screenshots,这会更好我猜