Genera miniature solo per le immagini in primo piano


9

Vorrei sapere se esiste un modo semplice (codice personalizzato o plug-in) per creare dimensioni delle miniature solo per le immagini che intendo utilizzare come immagini in primo piano (index.php, archive.php, ecc.), Ma non per le immagini utilizzato nei post (single.php). Il mio obiettivo principale è ridurre l'utilizzo dello spazio del server non creando miniature che il mio tema non utilizzerà mai.

Le mie miniature in realtà avrebbero solo due dimensioni, 720px di larghezza e 328px di larghezza, e le immagini in primo piano di 720px (solo homepage) ne avrebbero anche una di 328px (per archive.php e sidebar.php)

Attualmente, l'unico modo programmatico che conosco è generare miniature per ogni caricamento di immagini , il che è indesiderabile, dal momento che la maggior parte dei miei caricamenti saranno immagini post e dovrei eliminare molte immagini manualmente dal server.

Preferirei il codice personalizzato rispetto ai plug-in, ma un plug-in sarebbe accettabile. So che ci sono alcuni plugin di ridimensionamento delle immagini là fuori, ma non sono stati aggiornati da molto tempo (TimThumb, Dynamic Image Resizer ).

Ho anche trovato una domanda simile qui su Wordpress SE, ma la risposta accettata non risolve davvero il mio problema.


EDIT: ho bisogno di eliminare o impedire le miniature per le immagini all'interno del post, non per le immagini in primo piano, vale a dire:

(1) Immagine in primo piano : le miniature aggiuntive generate automaticamente da WP sono OK.

(2) Immagini utilizzate all'interno dei post : carica l'immagine originale e non genera dimensioni aggiuntive. Ritaglierò, ridimensionerò e ottimizzerò l'immagine prima di caricarla e una dimensione si adatterà alle mie esigenze.



1
In primo luogo, dice possibile duplicato ; in secondo luogo, potrebbe aiutarti a risolvere il tuo problema, perché potresti adattarlo alle tue esigenze; ultimo ma non meno importante, c'è una risposta al plug-in »Dynamic Image Resizer«, sebbene sia diverso.
Nicolai,

2
Non c'è tempo per immergersi in esso, ma quello che sai è l'ID della miniatura - meta key: _thumbnail_id-, che in realtà dovrebbe essere abbastanza, save_poste ganci simili potrebbero essere un modo per andare. Ma non dimenticare che quelle immagini nel tuo post potrebbero essere utilizzate in altri post come miniature, potresti voler avere un meccanismo per renderlo conto.
Nicolai,

1
Considerando ciò che hai scritto, non ti dispiace le dimensioni aggiuntive per l'immagine in primo piano, stavo più pensando: se sai quale delle immagini allegate è la miniatura del post / immagine in evidenza, puoi eliminare le dimensioni dell'immagine aggiuntive per le altre , escludendo l'immagine in primo piano da quel processo. Ho menzionato una possibile limitazione / svantaggio prima.
Nicolai,

1
Suggerimento: disabilita il ridimensionamento completo tramite add_filter('intermediate_image_sizes_advanced', '__return_false')e quindi ridimensiona la miniatura al volo con Glide
gmazzap

Risposte:


2

Questa funzione genererà un'immagine registrando temporaneamente una dimensione dell'immagine, generando l'immagine (se necessario) e rimuovendo la dimensione in modo che non vengano create nuove immagini in quella dimensione.

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;
}

È "pigro" perché le immagini non vengono generate fino a quando non sono necessarie.

Nel tuo caso d'uso, lo chiameresti lazy_image_sizecon l'ID della miniatura del post per ottenere un'immagine della dimensione desiderata. Un'immagine verrebbe generata alla prima chiamata. Le chiamate successive avrebbero recuperato l'immagine esistente.

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


0

Puoi vedere questo link . c'è qualche esempio come

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)
}

2
Ho bisogno delle anteprime solo per determinate immagini, non per tutto ciò che carico. Fondamentalmente, quando carico un'immagine voglio controllare se le miniature sono create o meno.
imrek,

ma perché? lo spazio di archiviazione è un problema? veramente difficile immaginarlo quando c'è così tanto spazio di archiviazione disponibile.
aequalsb,

0

1. Vai a Dashboard> Impostazioni> Media
2. Deseleziona Ritaglia miniature per dimensioni esatte (normalmente le miniature sono proporzionali)
3. Inserisci 0 per tutti gli input (0 per tutte le dimensioni)
4. Aggiungi queste alle tue funzioni.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. Assicurati che non ci sia una linea di codice nel tuo function.php inizia con add_imge_size Nota:: suppongo che tu usi la dimensione di 400x400 per la tua anteprima Ora quando carichi una foto, creerà solo 2 versioni invece di almeno 4 versioni foto come precedente.


0

Ciao, ho avuto un problema simile. Woocommerce utilizza le immagini del catalogo per il catalogo e le immagini dei prodotti correlati. Non è l'ideale, perché perdi la qualità dell'immagine o la velocità. Quindi ho provato ad aggiungere una quarta categoria di immagini per i miei prodotti correlati. Howdy McGee ha risolto il problema. Dai un'occhiata alla risposta di Howdy McGees:

Modifica le dimensioni delle immagini dei prodotti correlati: leggi il suo codice !

Ha funzionato magnificamente per le mie esigenze. Per il tuo problema potrebbe essere applicata la stessa logica. Spero che sia di aiuto. saluti - theo

Ho trovato una soluzione che funziona. 1.passo: assegna una nuova dimensione della miniatura nel tuo function.php. Verifica riferimento: codice wp !

/*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
}

Nota: "pollice", in seguito utilizzerai questo nome di variabile

  1. passaggio: quindi aggiungere il seguente codice ovunque si desideri visualizzare i prodotti in evidenza:

    <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>
    

Riferimenti e informazioni: non abbastanza reputazione per un terzo link, scusa (www.haloseeker.com/display-woocommerce-featured-products-without-a-shortcode/) L'ho inserito nell'indice.php (la mia homepage) di wootheme mystile . Non dimenticare di usare "il pollice" in linea:

<?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. passaggio: rigenerare le miniature, utilizzare il plug-in https://wordpress.org/plugins/regenerate-thumbnails/

  2. aggiorna il browser e controlla la dom e confronta i valori

In base al tema, è possibile modificare il markup e i nomi delle classi. Ho testato il metodo sopra e funziona bene. L'unica cosa che non ho potuto fare finora è, per aggiungere il pulsante Aggiungi al carrello, perché non so come scrivere una variabile nello shortcode del pulsante Aggiungi al carrello. Questo è il codice:

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

Spero che questo possa essere d'aiuto. C'è sicuramente un modo più elegante per farlo. Ad esempio con una funzione nel function.php

saluti


0

per impedire a WordPress di creare le dimensioni aggiuntive solo per determinate immagini, dovresti avere un modo per indicare che un'immagine che stai per caricare verrà utilizzata solo per uno scopo particolare. questo deve accadere PRIMA di caricarlo.

poiché non esiste una tale interfaccia (pronta all'uso) per indicare tali opzioni durante un'azione di caricamento, non è possibile impedire la generazione aggiuntiva di immagini, a meno che non sia stato installato un plug-in che ha aggiunto questa funzionalità.

ma perché nel mondo non vorresti le dimensioni dell'immagine aggiuntive? non sai mai quando potresti incontrare una situazione in cui desideri utilizzare una dimensione diversa di qualsiasi immagine. sei preoccupato per lo spazio di archiviazione?

non puoi usare le tue specifiche di dimensioni specifiche come questa? the_post_thumbnail( array(100, 100) );

la maggior parte delle risposte e dei commenti che ho letto qui spiega come personalizzare l'ambiente WordPress per le dimensioni delle immagini, ma nessuno menziona il fatto di farlo condizionatamente. inoltre, nessuno di essi affronta il fatto che devi essere in grado di indicare l'uso di un'immagine prima di caricarla.

se stai cercando di compensare un'immagine troppo piccola o un'immagine troppo grande in un post, puoi utilizzare alcune cose.

  1. CSS: puoi aggiungere voci al tuo foglio di stile come .post-entry img { max-width:200px; max-height:300px; }, questo è più universale ed efficace che fare affidamento sulla dimensione dell'immagine stessa - QUESTO è MOLTO tempo di Photoshop.

  2. Modello: è possibile modificare il file modello in cui viene generato l'output HTML dei post e specificare una dimensione dell'immagine come questa:

consulta questa documentazione su WordPress: https://codex.wordpress.org/Function_Reference/the_post_thumbnail

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.