it-swarm.com.de

Ersetzen Sie das ursprünglich hochgeladene Bild automatisch durch ein großes Bild

Da unsere Benutzer regelmäßig ca. 6 MB Bilder hochladen, um sie auf der Website zu verwenden (und nicht so gut mit der Größenänderung vertraut sind), speichert WordPress die Originale und passt sie auf verschiedene Größen an.

Ich hätte gerne eine Funktion oder ein Plugin, das das hochgeladene Bild auf eine verwaltbare Größe verkleinert und dann das Original ersetzt.

Ich habe einige Funktionen gesehen, die das Original löschen, aber nicht ersetzen. Das bedeutet, dass es unmöglich ist, die Miniaturansichten zu einem späteren Zeitpunkt neu zu generieren. Ich muss dieses ersetzen, damit der Benutzer ein großes Bild hochladen kann und es automatisch verkleinert und für zukünftige Größenänderungen gespeichert wird, falls erforderlich.

12
Shaun

Fügen Sie dies der Datei functions.php im Theme-Ordner hinzu. Es ersetzt das Originalbild durch das in den Einstellungen festgelegte große Bild. Möglicherweise möchten Sie ein neues Bildformat einrichten und dieses als neue Originalgröße verwenden.

function replace_uploaded_image($image_data) {
      // if there is no large image : return
  if (!isset($image_data['sizes']['large'])) return $image_data;

  // paths to the uploaded image and the large image
  $upload_dir = wp_upload_dir();
  $uploaded_image_location = $upload_dir['basedir'] . '/' .$image_data['file'];
  // $large_image_location = $upload_dir['path'] . '/'.$image_data['sizes']['large']['file']; // ** This only works for new image uploads - fixed for older images below.
  $current_subdir = substr($image_data['file'],0,strrpos($image_data['file'],"/"));
  $large_image_location = $upload_dir['basedir'] . '/'.$current_subdir.'/'.$image_data['sizes']['large']['file'];

  // delete the uploaded image
  unlink($uploaded_image_location);

  // rename the large image
  rename($large_image_location,$uploaded_image_location);

  // update image metadata and return them
  $image_data['width'] = $image_data['sizes']['large']['width'];
  $image_data['height'] = $image_data['sizes']['large']['height'];
  unset($image_data['sizes']['large']);

  return $image_data;
}

add_filter('wp_generate_attachment_metadata','replace_uploaded_image');
10
Paul Phillips

Es gibt einen bösen Fehler in der obigen Lösung. Die Lösung wirkt wie ein Zauber für neue Bilder, aber für alte Bilder sollten Sie niemals einen Vergleich mit $upload_dir['path'] anstellen, da dies der aktuelle Upload-Ordner des aktuellen Monats ist.

Ersetzen Sie Folgendes:

//$large_image_location = $upload_dir['path'] . '/'.$image_data['sizes']['large']['file'];
$large_image_location = $upload_dir['basedir'] . '/'.$image_data['sizes']['large']['path'];
3
timocouckuyt

Darf ich eine Aktualisierung des Codes der obigen Antwort vorschlagen? Leider wird in neueren Versionen von Wordpress die Taste 'Pfad' für die Dateigrößen nicht mehr bereitgestellt. Damit dies bei älteren Post-Uploads funktioniert, sollten wir zuerst das aktuelle Unterverzeichnis aus dem Originalbild abrufen und daraus den Pfad für das große Bild erstellen.

Also ersetzen Sie diese Zeile:

$large_image_location = $upload_dir['basedir'] . '/'.$image_data['sizes']['large']['path'];

durch diese 2 Zeilen:

$current_subdir = substr($image_data['file'],0,strrpos($image_data['file'],"/"));
$large_image_location = $upload_dir['basedir'] . '/'.$current_subdir.'/'.$image_data['sizes']['large']['file'];
2
leendertvb