3

投稿のタイトルと一致するアップロード ファイル名の名前を変更しようとしています。

この別のスレッドは、名前をハッシュに変更する方法を示してい
ます。Wordpress バックエンド内でアップロード中にファイルの名前を変更する

このコードの使用:

function make_filename_hash($filename) {
    $info = pathinfo($filename);
    $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
    $name = basename($filename, $ext);
    return md5($name) . $ext;
}
add_filter('sanitize_file_name', 'make_filename_hash', 10);

Post Title.extension に一致するようにファイルの名前を変更するコードを知っている人はいますか?

4

2 に答える 2

4

バラカダムの答えはほぼ正しいです。彼の答えの下に残したコメントに基づいて少し修正しただけです。

function new_filename($filename, $filename_raw) {
    global $post;
    $info = pathinfo($filename);
    $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
    $new = $post->post_title . $ext;
    // the if is to make sure the script goes into an indefinate loop
    if( $new != $filename_raw ) {
        $new = sanitize_file_name( $new );
    }
    return $new;
}
add_filter('sanitize_file_name', 'new_filename', 10, 2);

コードの説明:

picture one.jpg「My Holiday in Paris/London」という名前の投稿に、元のファイル名が付けられたファイルをアップロードするとします。

ファイルをアップロードすると、WordPress は関数を使用して元のファイル名から特殊文字を削除しsanitize_file_name()ます。

関数の一番下にフィルターがあります。

// line 854 of wp-includes/formatting.php
return apply_filters('sanitize_file_name', $filename, $filename_raw);

この時点で、$filename はpicture-one.jpg. を使用したためadd_filter()、 new_filename() 関数は $filename としてpicture-one.jpg、 $filename_rawとして呼び出されますpicture one.jpg

new_filename() 関数は、ファイル名を投稿タイトルに元の拡張子を追加したものに置き換えます。ここでやめると、新しいファイル名は、誰もが知っている無効なファイル名になって$newしまいます。My Holiday in Paris/London.jpg

ここで、sanitize_file_name 関数を再度呼び出します。そこの条件文に注意してください。この$new != $filename_raw時点で、ファイル名を再度サニタイズしようとします。

sanitize_file_name()が呼び出され、関数の最後に、 に$filenameなりますがMy-Holiday-in-Paris-London.jpg$filename_rawそれでもMy Holiday in Paris/London.jpg. のため、apply_filters()関数new_filename()が再び実行されます。でも今回は$new == $filename_raw、だから、それで終わりです。

そしてMy-Holiday-in-Paris-London.jpgついに返却。

于 2012-12-06T20:19:26.643 に答える
0

このようなもの?($post投稿変数を考慮して、グローバルにします):

function new_filename($filename) {
    global $post;
    $info = pathinfo($filename);
    $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
    return $post->post_title . $ext;
}
add_filter('sanitize_file_name', 'new_filename', 10);

私はあなたを理解しましたか?

于 2012-12-06T20:01:27.543 に答える