Generieren Sie Thumbnails nur für ausgewählte Bilder

9

Ich würde gerne wissen, ob es eine einfache Möglichkeit (benutzerdefinierter Code oder Plugin) gibt, Miniaturbildgrößen nur für Bilder zu erstellen , die ich als vorgestellte Bilder verwenden möchte (index.php, archive.php usw.), jedoch nicht für die Bilder in den Beiträgen verwendet (single.php). Mein Hauptziel ist es, die Speicherplatznutzung des Servers zu reduzieren, indem keine Miniaturansichten erstellt werden, die mein Thema niemals verwenden wird.

Meine Thumbnails hätten eigentlich nur zwei Größen, 720px breit und 328px breit, und die 720px breiten Bilder (nur Homepage) hätten auch eine 328px breite (für archive.php und sidebar.php).

Derzeit ist die einzige mir bekannte programmatische Methode das Generieren von Miniaturansichten für jeden Bild-Upload , was unerwünscht ist, da die meisten meiner Uploads Post-Bilder sind und ich viele Bilder manuell vom Server löschen müsste.

Ich würde benutzerdefinierten Code Plugins vorziehen, aber ein Plugin wäre akzeptabel. Ich weiß, dass es einige Plugins zur Größenänderung von Bildern gibt, die jedoch seit langem nicht mehr aktualisiert wurden (TimThumb, Dynamic Image Resizer ).

Ich habe hier in Wordpress SE auch eine ähnliche Frage gefunden, aber die akzeptierte Antwort löst mein Problem nicht wirklich.


BEARBEITEN: Ich muss Miniaturansichten für Bilder innerhalb des Beitrags löschen oder verhindern, nicht für vorgestellte Bilder, dh:

(1) Ausgewähltes Bild : Zusätzliche von WP automatisch generierte Miniaturansichten sind in Ordnung.

(2) In den Posts verwendete Bilder : Laden Sie das Originalbild hoch und generieren Sie keine zusätzlichen Größen. Ich werde das Bild vor dem Hochladen zuschneiden, seine Größe ändern und es optimieren, und eine Größe wird meinen Anforderungen entsprechen.

imrek
quelle
1
Erstens heißt es mögliches Duplikat ; Zweitens kann es Ihnen helfen, Ihr Problem zu lösen, da Sie es möglicherweise an Ihre Bedürfnisse anpassen können. Zu guter Letzt gibt es eine Antwort auf das Plug-In »Dynamic Image Resizer«, obwohl es eine andere ist.
Nicolai
2
Keine Zeit, sich darauf einzulassen, aber was Sie wissen, ist die Miniaturbild-ID - Meta-Schlüssel: _thumbnail_id-, die eigentlich ausreichen sollte, save_postund ähnliche Hooks könnten ein guter Weg sein. Vergessen Sie jedoch nicht, dass diese Bilder in Ihrem Beitrag in anderen Beiträgen als Miniaturansicht verwendet werden können. Möglicherweise möchten Sie einen Mechanismus, der dies berücksichtigt.
Nicolai
1
In Anbetracht dessen, was Sie geschrieben haben, macht Ihnen die zusätzliche Größe für das vorgestellte Bild nichts aus. Ich dachte eher: Wenn Sie wissen, welches der angehängten Bilder das Post-Miniaturbild / vorgestellte Bild ist, können Sie die zusätzlichen Bildgrößen für die anderen löschen durch Ausschließen des vorgestellten Bildes von diesem Prozess. Ich habe bereits eine mögliche Einschränkung / einen möglichen Nachteil erwähnt.
Nicolai
1
Vorschlag: Deaktivieren Sie die Größenänderung vollständig über add_filter('intermediate_image_sizes_advanced', '__return_false')und ändern Sie die Größe der Miniaturansicht im
laufenden Betrieb

Antworten:

2

Diese Funktion generiert ein Bild, indem vorübergehend eine Bildgröße registriert, das Bild (falls erforderlich) generiert und die Größe entfernt wird, sodass keine neuen Bilder in dieser Größe erstellt werden.

function lazy_image_size($image_id, $width, $height, $crop) {
    // Temporarily create an image size
    $size_id = 'lazy_' . $width . 'x' .$height . '_' . ((string) $crop);
    add_image_size($size_id, $width, $height, $crop);

    // Get the attachment data
    $meta = wp_get_attachment_metadata($image_id);

    // If the size does not exist
    if(!isset($meta['sizes'][$size_id])) {
        require_once(ABSPATH . 'wp-admin/includes/image.php');

        $file = get_attached_file($image_id);
        $new_meta = wp_generate_attachment_metadata($image_id, $file);

        // Merge the sizes so we don't lose already generated sizes
        $new_meta['sizes'] = array_merge($meta['sizes'], $new_meta['sizes']);

        // Update the meta data
        wp_update_attachment_metadata($image_id, $new_meta);
    }

    // Fetch the sized image
    $sized = wp_get_attachment_image_src($image_id, $size_id);

    // Remove the image size so new images won't be created in this size automatically
    remove_image_size($size_id);
    return $sized;
}

Es ist "faul", weil Bilder erst generiert werden, wenn sie benötigt werden.

In Ihrem Anwendungsfall würden Sie dies lazy_image_sizemit der Post-Thumbnail-ID aufrufen, um ein Bild mit der gewünschten Größe zu erhalten. Beim ersten Aufruf wird ein Bild generiert. Nachfolgende Aufrufe würden das vorhandene Bild abrufen.

Inhalt: https://gist.github.com/mtinsley/be503d90724be73cdda4

Mathew Tinsley
quelle
0

Sie können diesen Link sehen . Es gibt ein Beispiel wie

add_action( 'after_setup_theme', 'baw_theme_setup' );
function baw_theme_setup() {
  add_image_size( 'category-thumb', 300 ); // 300 pixels wide (and unlimited height)
  add_image_size( 'homepage-thumb', 220, 180, true ); // (cropped)
}
Jakir Hossain
quelle
2
Ich benötige Thumbnails nur für bestimmte Bilder, nicht für alles, was ich hochlade. Grundsätzlich möchte ich beim Hochladen eines Bildes steuern, ob Miniaturansichten erstellt werden oder nicht.
Imrek
aber warum? Ist Speicherplatz ein Problem? Wirklich schwer vorstellbar, wenn so viel Speicherplatz zur Verfügung steht.
Aequalsb
0

1.Gehen Sie zu Dashboard> Einstellungen> Medien.
2. Deaktivieren Sie das Kontrollkästchen Miniaturbild auf exakte Abmessungen zuschneiden (normalerweise sind Miniaturbilder proportional).
3. Geben Sie 0 für alle Eingaben ein (0 für alle Größen).
4. Fügen Sie diese zu Ihrer functions.php hinzu

// Enable support for Post Thumbnails, and declare sizes.
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 400, 400, array("center","center") );
function fw_add_image_insert_override($sizes){
    // unset( $sizes['thumbnail']);
    unset( $sizes['small']);
    unset( $sizes['medium']);
    unset( $sizes['large']);
    return $sizes;
}
add_filter('intermediate_image_sizes_advanced', 'fw_add_image_insert_override' );

5. Stellen Sie sicher, dass Ihre functions.php keine Codezeile enthält. Beginnen Sie mit add_imge_size Hinweis :: Ich nehme an, Sie verwenden die Größe 400x400 für Ihre Miniaturansicht. Wenn Sie jetzt ein Foto hochladen, werden nur 2 Versionen anstelle von mindestens 4 Fotoversionen erstellt wie zuvor.

Trang
quelle
0

Hallo - ich hatte ein ähnliches Problem. Woocommerce verwendet Katalogbilder für Katalog- und verwandte Produktbilder. Das ist nicht ideal, da Sie entweder die Bildqualität oder die Geschwindigkeit verlieren. Also habe ich versucht, eine vierte Bildkategorie für meine verwandten Produkte hinzuzufügen. Howdy McGee hat das Problem gelöst. Bitte werfen Sie einen Blick auf Howdy McGees Antwort:

Verwandte Produktbildgrößen ändern: Lesen Sie seinen Code !

Es hat großartig für meine Bedürfnisse geklappt. Für Ihr Problem könnte dieselbe Logik angewendet werden. Hoffe das hilft. Grüße - theo

Ich habe eine Lösung gefunden, die funktioniert. 1.Schritt: Weisen Sie in Ihrer functions.php eine neue Miniaturbildgröße zu. Referenz überprüfen : wp Codex !

/*add your custom size*/
add_action( 'after_setup_theme', 'your_theme_setup' );
function your_theme_setup() {
add_image_size( 'your-thumb', 123, 123, true );//insert your values
}

Hinweis: 'your-thumb', Sie werden diesen Variablennamen später verwenden

  1. Schritt: Fügen Sie dann den folgenden Code hinzu, wo immer Sie Ihre vorgestellten Produkte anzeigen möchten:

    <h1>featured products</h1> 
    <div class="woocommerce">
    <ul class= "products">
    
    <?php
    $args = array( 'post_type' => 'product', 'meta_key' => '_featured','posts_per_page' => 4,'columns' => '4', 'meta_value' => 'yes' );
     $loop = new WP_Query( $args );
    
     while ( $loop->have_posts() ) : $loop->the_post(); global $product; ?>
    
                    <li class="product post-<?php echo get_the_ID(); ?>">    
                        <a href="<?php echo get_permalink( $loop->post->ID ) ?>" title="<?php echo esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID); ?>">
    
                            <?php woocommerce_show_product_sale_flash( $post, $product ); ?>
                            <?php if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, 'your-thumb'); else echo '<img src="'.woocommerce_placeholder_img_src().'" alt="Placeholder" width="123px" height="123px" />'; ?></a>
                            <h3><?php the_title(); ?></h3><span class="price"><?php echo $product->get_price_html(); ?></span>
    
                    </li>
    
    <?php endwhile; ?>
    <?php wp_reset_query(); ?> 
    </ul>
    </div>

Referenz und Infos: Nicht genug Ruf für einen dritten Link, sorry (www.haloseeker.com/display-woocommerce-featured-products-without-a-shortcode/) Ich habe ihn in die index.php (meine Homepage) von wootheme mystile gestellt . Vergessen Sie nicht, "Ihren Daumen" online zu verwenden:

<?php if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, 'your-thumb'); else echo '<img src="'.woocommerce_placeholder_img_src().'" alt="Placeholder" width="123px" height="123px" />'; ?></a>
  1. Schritt: Miniaturansichten neu generieren, Plugin https://wordpress.org/plugins/regenerate-thumbnails/ verwenden

  2. Aktualisieren Sie den Browser, überprüfen Sie den Dom und vergleichen Sie die Werte

Je nach Thema können Sie die Markierungs- und Klassennamen ändern. Ich teste die obige Methode und sie funktioniert gut. Das einzige, was ich bisher nicht tun konnte, ist, die Schaltfläche zum Hinzufügen zum Warenkorb hinzuzufügen, da ich nicht weiß, wie ich eine Variable in den Shortcode der Schaltfläche zum Hinzufügen zum Warenkorb schreiben soll. Dies ist der Code:

<?php echo do_shortcode('[add_to_cart id="variable number?"]'); ?>

Ich hoffe das hilft. Es gibt sicherlich einen eleganteren Weg, dies zu tun. Zum Beispiel mit einer Funktion in der functions.php

Grüße theo

Timholz
quelle
0

Um zu verhindern, dass WordPress die zusätzlichen Größen nur für bestimmte Bilder festlegt, müssen Sie angeben können, dass ein Bild, das Sie hochladen möchten, nur für einen bestimmten Zweck verwendet wird. Dies muss geschehen, bevor Sie es hochgeladen haben.

Da es keine solche Schnittstelle (sofort einsatzbereit) gibt, die solche Optionen während einer Upload-Aktion anzeigt, können Sie die zusätzliche Bilderzeugung nicht verhindern - es sei denn, es gab ein Plugin, das diese Funktion hinzugefügt hat.

aber warum in aller Welt möchten Sie nicht die zusätzlichen Bildgrößen? Sie wissen nie, wann Sie auf eine Situation stoßen können, in der Sie eine andere Größe eines Bildes verwenden möchten. Sind Sie besorgt über Speicherplatz?

Können Sie nicht Ihre eigenen spezifischen Größenangaben wie diese verwenden? the_post_thumbnail( array(100, 100) );

Die meisten Antworten und Kommentare, die ich hier gelesen habe, erklären, wie man die WordPress-Umgebung an Bildgrößen anpasst, aber keiner erwähnt, dass dies bedingt erfolgt. Außerdem geht keiner von ihnen auf die Tatsache ein, dass Sie in der Lage sein müssen, die Verwendung eines Bildes anzugeben, bevor Sie es hochladen.

Wenn Sie versuchen, ein zu kleines Bild oder ein zu großes Bild in einem Beitrag zu kompensieren, können Sie einige Dinge verwenden.

  1. CSS: Sie können Ihrem Stylesheet Einträge hinzufügen, z. B. .post-entry img { max-width:200px; max-height:300px; }ist dies universeller und effektiver, als sich auf die Größe des Bildes selbst zu verlassen - DAS ist eine Menge Photoshop-Zeit.

  2. Vorlage: Sie können die Vorlagendatei ändern, in der die HTML-Ausgabe der Beiträge generiert wird, und eine Bildgröße wie die folgende angeben:

Weitere Informationen finden Sie in dieser Dokumentation unter WordPress: https://codex.wordpress.org/Function_Reference/the_post_thumbnail

aequalsb
quelle