Sie sollten sich an den Filter wp_handle_upload_prefilter anschließen (zu dem ich keine Dokumentation finden kann, der aber ziemlich einfach zu sein scheint). Ich habe das vor Ort ausprobiert und es scheint für mich zu funktionieren:
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);
In meinen Tests scheint es, dass Posts nur dann einen Slug haben, wenn Sie hübsche Permalinks aktiviert haben. Daher habe ich vor dem Umbenennen der Datei eine Überprüfung hinzugefügt, um sicherzustellen, dass ein Slug vorhanden ist. Sie sollten auch den Dateityp überprüfen, was ich hier nicht getan habe - ich habe nur angenommen, dass es sich um ein JPG handelt.
BEARBEITEN
Wie im Kommentar angefordert, ändert diese zusätzliche Funktion einige der Metaattribute für das hochgeladene Bild. Es scheint jedoch nicht möglich zu sein, den ALT-Text festzulegen, und aus irgendeinem Grund wird der Wert, den Sie als "Beschriftung" festgelegt haben, tatsächlich als Beschreibung zugewiesen. Du musst damit Affen sein. Ich habe diesen Filter in der Funktion wp_read_image_metadata () gefunden, die sich in wp-admin / includes / image.php befindet. Darauf stützen sich die Funktionen zum Hochladen von Medien und wp_generate_attachment_metadata, um Metadaten aus dem Bild abzurufen. Sie können dort einen Blick darauf werfen, wenn Sie weitere Einblicke wünschen.
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);
Bearbeitet am 04.04.2012, um die Post-ID aus dem REQUEST-Objekt zu ziehen, anstatt GET und POST nacheinander zu überprüfen. Basierend auf Vorschlägen in den Kommentaren.