web-dev-qa-db-ja.com

アップロード中に添付ファイルの名前を変更する

これは私がWPを使ってアップロード中に画像の名前を変更したり、画像のファイル名をポストスラッグに合わせて設定するためのものです。

function wpsx_5505_modify_uploaded_file_names($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);
        $arr['name'] = $post_slug . '-' . $random_number . '.jpg';

    }

}

return $arr;

}
add_filter('wp_handle_upload_prefilter', 'wpsx_5505_modify_uploaded_file_names', 1, 1);

$ post_slugを追加して元のファイル名を保持したい

[thread_title] - [original_filename] .ext

2
Daniela

あなたは交換しようとすることができます

$arr['name'] = $post_slug . '-' . $random_number . '.jpg';

$arr['name'] = $post_slug . '-' . $arr['name'];

ファイルフォーマット[post_slug]-[original_filename].extを取得します。

更新:

これは、ファイル名が$arrの画像のcar.png構造体の例です。

 Array
(
    [name] => car.png
    [type] => image/png
    [tmp_name] => /tmp/phpJKhCwI
    [error] => 0
    [size] => 5868
)

[post_slug].extフォーマットを取得するために、これを使うことができます:

$arr['name'] = $post_slug . '.' . pathinfo( $arr['name'], PATHINFO_EXTENSION );

投稿のタイトルがMy favorite carのときは、

 Array
(
    [name] => my-favorite-car.png
    [type] => image/png
    [tmp_name] => /tmp/phpJKhCwI
    [error] => 0
    [size] => 5868
)

同じファイル名で複数の画像がアップロードされると、アップロードされた画像のファイル名は次のようになります。

my-favorite-car.png  (1. upload)
my-favorite-car1.png (2. upload)
my-favorite-car2.png (3. upload)
...
2
birgire