web-dev-qa-db-de.com

Generieren Sie Thumbnails nur für ausgewählte Bilder

Ich würde gerne wissen, ob es einen einfachen Weg (benutzerdefinierten Code oder Plugin) gibt, um Thumbnail-Größen nur für Bilder zu erstellen, die ich als empfohlene Bilder (index.php, archive) verwenden möchte .php, etc.), aber nicht für die in den Beiträgen verwendeten Bilder (single.php). Mein Hauptziel ist es, den Speicherplatz auf dem Server zu reduzieren, indem ich keine Miniaturansichten erstelle, die mein Thema niemals verwenden wird.

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

Derzeit ist die einzige mir bekannte programmatische Möglichkeit, Miniaturansichten für jeden Bild-Upload zu erstellen , 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 gegenüber Plugins bevorzugen, aber ein Plugin wäre akzeptabel. Ich weiß, dass es einige Plugins zur Größenänderung von Bildern gibt, aber sie wurden seit langem nicht mehr aktualisiert (TimThumb, Dynamic Image Resizer ).

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


BEARBEITEN: Ich muss Thumbnails für Bilder im Beitrag löschen oder verhindern, nicht für vorgestellte Bilder, d. H .:

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

(2) In den Beiträgen verwendete Bilder : Laden Sie das Originalbild hoch und generieren Sie keine zusätzlichen Größen. Ich werde das Bild zuschneiden, seine Größe ändern und es optimieren, bevor ich es hochlade, und eine Größe wird meinen Bedürfnissen entsprechen.

8
Drunken Master

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 diesen lazy_image_size mit der Post-Thumbnail-ID aufrufen, um ein Bild in der gewünschten Größe zu erhalten. Beim ersten Aufruf würde ein Bild generiert. Nachfolgende Aufrufe würden das vorhandene Bild abrufen.

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

2
Mathew Tinsley

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

da es keine solche Schnittstelle gibt (standardmäßig), die solche Optionen während eines Uploads 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, in der Sie eine andere Größe eines Bildes verwenden möchten. Sorgen Sie sich um Speicherplatz?

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

in den meisten Antworten und Kommentaren, die ich hier gelesen habe, wird erklärt, wie die WordPress-Umgebung für Bildgrößen angepasst wird. Außerdem geht keine davon 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 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 wie .post-entry img { max-width:200px; max-height:300px; } hinzufügen. Dies ist 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 für Beiträge generiert wird, und eine Bildgröße wie die folgende festlegen:

siehe diese Dokumentation bei WordPress: https://codex.wordpress.org/Function_Reference/the_post_thumbnail

0
aequalsb

Sie können diesen Link sehen. Es gibt einige Beispiele 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)
}
0
Jakir Hossain

Hi - ich hatte ein ähnliches Problem. Woocommerce verwendet Katalogbilder für Katalog- und verwandte Produktbilder. Das ist nicht ideal, denn Sie verlieren entweder die Bildqualität oder die Geschwindigkeit. Deshalb 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 Produktabbildungen ändern Größen: Code lesen !

Es hat hervorragend 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 Thumbnail-Größ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>
    

Hinweis und Infos: Der Ruf für einen dritten Link ist nicht ausreichend, 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, "your-thumb" 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: regeneriere Thumbnails, benutze das Plugin https://wordpress.org/plugins/regenerate-thumbnails/

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

Je nach Thema können Sie die Markup- und Klassennamen ändern. Ich habe die obige Methode getestet und es funktioniert gut. Das Einzige, was ich bisher nicht konnte, ist das Hinzufügen des Buttons zum Warenkorb, da ich nicht weiß, wie ich eine Variable in den Shortcode für den Button 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

0
timholz

1.Gehen Sie zu Dashboard> Einstellungen> Medien
2. Deaktivieren Sie Miniaturansicht auf exakte Abmessungen zuschneiden (normalerweise sind Miniaturansichten proportional).
3.Geben Sie 0 für alle Eingaben ein (0 für alle Größen)
4.Füge diese zu deinen Funktionen hinzu.php

// 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. Vergewissern Sie sich, dass Ihre functions.php keine Codezeile enthält. Beginnen Sie mit add_imge_size Hinweis: : Ich nehme an, Sie verwenden eine Größe von 400x400 für Ihr Vorschaubild. Wenn Sie jetzt ein Foto hochladen, werden statt nur 2 Versionen erstellt mindestens 4 Versionen Foto wie zuvor.

0
Trang