Fügen Sie dem Dateinamen der hochgeladenen Bilder ein Suffix hinzu

Ich habe 3 benutzerdefinierte Bildgrößen (Double-Size, für Retina-Displays) mit add_image_size: thumbnail @ 2x, medium @ 2x und large @ 2x registriert.

function retina_image_sizes() { $retina_sizes = array( 'thumbnail@2x' => array( 'width' => get_option( 'thumbnail_size_w' ) * 2, 'height' => get_option( 'thumbnail_size_h' ) * 2, 'crop' => get_option('thumbnail_crop'), ), 'medium@2x' => array( 'width' => get_option( 'medium_size_w' ) * 2, 'height' => get_option( 'medium_size_h' ) * 2, 'crop' => false, ), 'large@2x' => array( 'width' => get_option( 'large_size_w' ) * 2, 'height' => get_option( 'large_size_h' ) * 2, 'crop' => false, ) ); foreach ( $retina_sizes as $name => $data ) { add_image_size( $name, $data['width'], $data['height'], $data['crop'] ); } } add_action( 'init', 'retina_image_sizes'); 

Die Namenskonvention von WordPress lautet Dateiname-width x height.jpg. Aber ich brauche sie auf eine andere Art zu benennen (Dateiname-originalwidth x originalheight@2x.jpg)

Wenn ich ein Bild hochlade und das Miniaturbild beispielsweise eine Größe von 100×100 hat, möchte ich, dass die Bilder benannt werden:

 example-100x100.jpg and example-100x100@2x.jpg 

Ich habe Wege gefunden, Bilder zu verarbeiten und unter einem anderen Namen zu speichern, aber das ist zu viel. Diese Frage erklärt, wie man den Dateinamen ändert, aber nicht, wie man mit und Höhe Informationen einbeziehen soll. Ich habe versucht, es zur Arbeit zu bringen, aber ich bekomme nur eine einzige Datei statt sieben und es wirft einige Fehler (wahrscheinlich weil es versucht, die Datei zu überschreiben).

Wie kann ich den Dateinamen in der oben beschriebenen Weise ändern? Ist der add_attachment-Hook der richtige?

Solutions Collecting From Web of "Fügen Sie dem Dateinamen der hochgeladenen Bilder ein Suffix hinzu"

Ich habe es anders gemacht. Ich musste nur den Code von Gerasimos Tsiamalos Retina Plugin zu WordPress 3.5 aktualisieren, indem ich den Bild-Editor anstelle der Bild-Größenanpassung verwendete.

So sieht es aus:

 function nothing_image_make_retina_size($file, $width, $height, $crop=false) { if ( $width || $height ) { $resized_file = wp_get_image_editor($file); if ( ! is_wp_error( $resized_file ) ) { $resized_file->resize( $width*2, $height*2, $crop ); $filename = $resized_file->generate_filename( $width . 'x' . $height . '@2x' ); $resized_file->save($filename); } if ( !is_wp_error($resized_file) && $resized_file && $info = getimagesize($filename) ) { $filename = apply_filters('nothing_retina_image_make_intermediate_size', $filename); return array( 'file' => wp_basename( $filename ), 'width' => $info[0], 'height' => $info[1], ); } } return false; } function nothing_generate_retina_image_metadata( $metadata, $attachment_id ) { $attachment = get_post( $attachment_id ); $file = get_attached_file($attachment_id); $old_metadata = $metadata; foreach ($metadata as $k => $v) { if (is_array($v)) { foreach ($v as $key => $val) { if (is_array($val)) { nothing_image_make_retina_size($file, $val['width'], $val['height'], true); } } } } return $old_metadata; } add_filter('wp_generate_attachment_metadata', 'nothing_generate_retina_image_metadata', 10, 2); function nothing_delete_retina_images( $attachment_id ) { $nothing_metas = wp_get_attachment_metadata( $attachment_id ); $nothing_updir = wp_upload_dir(); $nothing_path = pathinfo($nothing_metas['file']); $nothing_path_name = $nothing_path['dirname']; $nothing_updir = wp_upload_dir(); foreach ($nothing_metas as $nothing_meta => $nothing_meta_val) { if ($nothing_meta === "sizes") { foreach ($nothing_meta_val as $nothing_sizes => $nothing_size) { $nothing_original_filename = $nothing_updir['basedir'] . "/" . $nothing_path_name . "/" . $nothing_size['file']; $nothing_x2_filename = substr_replace($nothing_original_filename, "@2x.", strrpos($nothing_original_filename, "."), strlen(".")); if (file_exists($nothing_x2_filename)) { unlink($nothing_x2_filename); } } } } } add_filter('delete_attachment','nothing_delete_retina_images');