Ist es möglich, das WordPress-Upload-Verzeichnis zu reorganisieren?

Ich habe eine WordPress-Seite, auf der alle Uploads nach /wp-content/uploads/* hochgeladen wurden. Jetzt, wo es Tausende von Bildern gibt, gibt es einen performanceseinbruch, und ich wurde beauftragt, Abhilfe zu schaffen.

Hat jemand das Uploads-Verzeichnis vorher sortiert? Verschieben Sie es in ein strukturierteres YYYY / MM? Ich würde gerne einige Strategien hören, wie dies erreicht wurde.

Solutions Collecting From Web of "Ist es möglich, das WordPress-Upload-Verzeichnis zu reorganisieren?"

Leider ist das eine sehr traurige Tatsache über WordPress, es bietet fast keine Anpassung für die Uploads im Backend (außer den y / m-Organisationskram).

Was Sie tun können, ist, Ihre eigene benutzerdefinierte class zu erstellen, um die Thumbnails (die der wichtigste Teil der Auswirkungen auf die performance sind, da jedes Bild ein paar bis dutzende Thumbnails erzeugt) auf eine organisierte Weise zu erstellen.

Schritt 1, 2 und 3: Erstellen Sie eine Sicherungskopie aller Ihrer Uploads. Was Sie tun werden, kann nicht rückgängig gemacht werden, es sei denn, Sie haben eine Sicherung Ihres Uploads-Ordners!

Schritt 4: Laden Sie das Thumbnail Cleaner- Plugin herunter und installieren Sie es. Auf diese Weise können Sie jedes generierte Miniaturbild löschen.

Schritt 5: Erstellen Sie Ihre eigene Generierungsmethode. Ich habe ein Beispiel für dich:

 add_filter('wp_image_editors', 'my_wp_image_editors'); function my_wp_image_editors($editors) { array_unshift($editors, "my_WP_Image_Editor"); return $editors; } // Include the existing classes first in order to extend them. require_once ABSPATH . WPINC . "/class-wp-image-editor.php"; require_once ABSPATH . WPINC . "/class-wp-image-editor-gd.php"; // Now we extend the original image editor class class my_WP_Image_Editor extends WP_Image_Editor_GD { public function generate_filename($suffix = null, $dest_path = null, $extension = null) { // $suffix will be appended to the destination filename, just before the extension if (!$suffix) { $suffix = $this->get_suffix(); } $dir = pathinfo($this->file, PATHINFO_DIRNAME); $ext = pathinfo($this->file, PATHINFO_EXTENSION); $name = wp_basename($this->file, ".$ext"); $new_ext = strtolower($extension ? $extension : $ext ); if (!is_null($dest_path) && $_dest_path = realpath($dest_path)) { $dir = $_dest_path; } //we get the dimensions using explode, we could have used the properties of $this->file[height] but the suffix could have been provided $size_from_suffix = explode("x", $suffix); //we get the slug_name for this dimension $slug_name = $this->get_slug_by_size($size_from_suffix[0], $size_from_suffix[1]); return trailingslashit( $dir ) . "{$slug_name}/{$name}.{$new_ext}"; } function multi_resize($sizes) { $metadata = array(); $orig_size = $this->size; foreach ( $sizes as $size => $size_data ) { if ( ! isset( $size_data['width'] ) && ! isset( $size_data['height'] ) ) { continue; } if ( ! isset( $size_data['width'] ) ) { $size_data['width'] = null; } if ( ! isset( $size_data['height'] ) ) { $size_data['height'] = null; } if ( ! isset( $size_data['crop'] ) ) { $size_data['crop'] = false; } $image = $this->_resize( $size_data['width'], $size_data['height'], $size_data['crop'] ); if ( ! is_wp_error( $image ) ) { $resized = $this->_save( $image ); imagedestroy( $image ); if ( ! is_wp_error( $resized ) && $resized ) { unset( $resized['path'] ); $metadata[$size] = $resized; } } $this->size = $orig_size; } //we add the slug to the file path foreach ($metadata as $slug => $data) { $metadata[$slug]['file'] = $slug . "/" . $data['file']; } return $metadata; } // Our custom function to retrieve the proper slug by weight and height function get_slug_by_size($width, $height) { // Make thumbnails and other intermediate sizes. $_wp_additional_image_sizes = wp_get_additional_image_sizes(); $image_sizes = array(); //all sizes the default ones and the custom ones in one array foreach (get_intermediate_image_sizes() as $s) { $image_sizes[$s] = array('width' => '', 'height' => '', 'crop' => false); if (isset($_wp_additional_image_sizes[$s]['width'])) { // For theme-added sizes $image_sizes[$s]['width'] = intval($_wp_additional_image_sizes[$s]['width']); } else { // For default sizes set in options $image_sizes[$s]['width'] = get_option("{$s}_size_w"); } if (isset($_wp_additional_image_sizes[$s]['height'])) { // For theme-added sizes $image_sizes[$s]['height'] = intval($_wp_additional_image_sizes[$s]['height']); } else { // For default sizes set in options $image_sizes[$s]['height'] = get_option("{$s}_size_h"); } if (isset($_wp_additional_image_sizes[$s]['crop'])) { // For theme-added sizes $image_sizes[$s]['crop'] = $_wp_additional_image_sizes[$s]['crop']; } else { // For default sizes set in options $image_sizes[$s]['crop'] = get_option("{$s}_crop"); } } $slug_name = ""; //the slug's name if($width >= $height){ foreach ($image_sizes as $slug => $data) { // we start checking if ($data['width'] == $width) {//we use only width because regardless of the height, the width is the one used for resizing in all cases with crop 1 or 0 $slug_name = $slug; } /* * There could be custom added image sizes that have the same width as one of the defaults so we also use height here * if there are several image sizes with the same width all of them will override the previous one leaving the last one, here we get also the last one * since is looping the entire list, the height is used as a max value for non-hard cropped sizes * */ if ($data['width'] == $width && $data['height'] == $height) { $slug_name = $slug; } } } else { foreach ($image_sizes as $slug => $data) { if ($data['height'] == $height) { $slug_name = $slug; } if ($data['height'] == $height && $data['width'] == $width ) { $slug_name = $slug; } } } return $slug_name; } } 

Diese class wird fast von der ursprünglichen class kopiert, die in class-wp-image-editor-gd.php , mit einem Unterschied: Sie speichert die Thumbnails in separaten Ordnern, alle im Upload-Verzeichnis basierend auf ihrem Größe-Slug. Wenn Sie also ein Bild hochgeladen haben, erhalten Sie so etwas:

 /uploads/image.jpg /uploads/thumbnail/image.jpg /uploads/medium/image.jpg /uploads/large/image.jpg // And so on... 

Dies verhindert, dass eine Million Bilder in einem einzelnen Ordner gespeichert werden. Sie können die class wie gewünscht bearbeiten, die Pfade ändern und vieles mehr. Es wurde als Beispiel gezeigt, wie die Bilder erzeugt und gespeichert werden.

Schritt 6: Verwende das Thumbnails- Plugin neu generieren, um deinen Upload-Ordner mit neu erstellten Thumbnails auf originelle Weise zu füllen. Dies verhindert, dass ein paar Tausend Thumbnails in einem einzigen Ordner gespeichert werden. Ein Arbeitsbeispiel finden Sie hier . Klicke mit der rechten Maustaste und öffne ein Thumbnail in einem neuen Tab und versuche, den Slug zu ändern, um zu sehen, wie es funktioniert.

Ich hoffe, dies hat Ihnen ein tieferes Verständnis darüber gegeben, wie Sie die Bilderzeugung in WordPress manipulieren können.