アップロード中にファイルの名前を変更して、ファイルの添付先のスラッグにファイル名を設定したいのですが、ファイル名を変えるためにランダムな文字(単純な増分カウンタでも問題ありません)が追加されます。
言い換えれば、私がそのページslugが "test-page-slug"である投稿に画像をアップロード/添付している場合、その画像の名前をその場でtest-page-slug-[C].[extension]
に変更したいと思います。
このプラグインがあります、 Custom Upload Dir :
このプラグインを使用すると、投稿タイトル、ID、カテゴリ、投稿者、投稿日などの追加の変数からパスを作成できます。
ファイル名に対しても同じことができますか。
あなたはwp_handle_upload_prefilterフィルタ(私はドキュメントを見つけることができませんが、とても単純に思えます)にフックしたいと思うでしょう。私はこれをローカルで試してみましたが、うまくいくようです。
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);
私のテストでは、パーマリンクが有効になっている場合にのみ投稿にスラッグがあるように思われるので、ファイル名を変更する前にスラッグがあることを確認するためのチェックを追加しました。また、ここでは行っていないファイルの種類をチェックすることも検討したいと思います - 私はちょうどそれがjpgであると仮定しました。
_編集_
コメントで要求されているように、この追加機能はアップロードされた画像のメタ属性のいくつかを変更します。 ALTテキストを設定させているようには見えませんが、何らかの理由で「キャプション」として設定した値が実際には説明として割り当てられています。あなたはそれで猿をしなければならないでしょう。このフィルタは、wp-admin/includes/image.phpにあるwp_read_image_metadata()関数にあります。それはメディアのアップロードとwp_generate_attachment_metadata関数が画像からメタデータを引き出すために依存しているものです。もう少し洞察が必要な場合は、そこを見てください。
function wpsx_5505_modify_uploaded_file_meta($meta, $file, $sourceImageType) {
// 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 title
$post_title = get_the_title($post_id);
// If we found a title
if($post_title) {
$meta['title'] = $post_title;
$meta['caption'] = $post_title;
}
}
return $meta;
}
add_filter('wp_read_image_metadata', 'wpsx_5505_modify_uploaded_file_meta', 1, 3);
GETとPOSTを連続してチェックするのではなく、REQUEST objからpost IDを取得するように2012/04/04を編集しました。コメントの提案に基づいています。