Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [Wordpress] Impostare functions.php per scartare images large

    Sono sicuro all'80% di aver letto in questo forum che esisterebbe un modo - mediante la pagina functions.php - per impedire a wp di salvare di default le immagini in versione small, medium e large.

    Tuttavia, nonostante il search, non sono riuscito a trovare nulla, quindi sono costretto ad aprire questo topic...

    Ho bisogno di far sì che, anche se l'immagine che io carico su un determinato post come 'featured image' è enorme (es. 2400x1900 su 3mb), il mio WP ne salvi solamente una versione small ed una medium, eliminando di fatto la large (o original in particolare). Non intasando dunque il mio storage.

    E' possibile? Come?

  2. #2
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,654
    Ciao, qui potresti trovare le indicazioni per customizzare la generazione delle immagini.

  3. #3
    Ti ringrazio per la dritta.
    Tuttavia quel documento spiegava come aggiungere una "ulteriore" image size.

    Credo di aver trovato ciò che cercavo: https://codex.wordpress.org/it:Rifer...ize_for_editor
    Però non capisco se anche in questo caso si tratti di una ulteriore immagine ridimensionata, o se finalmente questa funzione preveda di scartare di default l'original image full size, senza salvarla in cartella uploads


    codice:
    function image_constrain_size_for_editor( $width, $height, $size = 'medium', $context = null ) {
    58 global $content_width;
    59
    60 $_wp_additional_image_sizes = wp_get_additional_image_sizes();
    61
    62 if ( ! $context )
    63 $context = is_admin() ? 'edit' : 'display';
    64
    65 if ( is_array($size) ) {
    66 $max_width = $size[0];
    67 $max_height = $size[1];
    68 }
    69 elseif ( $size == 'thumb' || $size == 'thumbnail' ) {
    70 $max_width = intval(get_option('thumbnail_size_w'));
    71 $max_height = intval(get_option('thumbnail_size_h'));
    72 // last chance thumbnail size defaults
    73 if ( !$max_width && !$max_height ) {
    74 $max_width = 128;
    75 $max_height = 96;
    76 }
    77 }
    78 elseif ( $size == 'medium' ) {
    79 $max_width = intval(get_option('medium_size_w'));
    80 $max_height = intval(get_option('medium_size_h'));
    81
    82 }
    83 elseif ( $size == 'medium_large' ) {
    84 $max_width = intval( get_option( 'medium_large_size_w' ) );
    85 $max_height = intval( get_option( 'medium_large_size_h' ) );
    86
    87 if ( intval( $content_width ) > 0 ) {
    88 $max_width = min( intval( $content_width ), $max_width );
    89 }
    90 }
    91 elseif ( $size == 'large' ) {
    92 /*
    93 * We're inserting a large size image into the editor. If it's a really
    94 * big image we'll scale it down to fit reasonably within the editor
    95 * itself, and within the theme's content width if it's known. The user
    96 * can resize it in the editor if they wish.
    97 */
    98 $max_width = intval(get_option('large_size_w'));
    99 $max_height = intval(get_option('large_size_h'));
    100 if ( intval($content_width) > 0 ) {
    101 $max_width = min( intval($content_width), $max_width );
    102 }
    103 } elseif ( ! empty( $_wp_additional_image_sizes ) && in_array( $size, array_keys( $_wp_additional_image_sizes ) ) ) {
    104 $max_width = intval( $_wp_additional_image_sizes[$size]['width'] );
    105 $max_height = intval( $_wp_additional_image_sizes[$size]['height'] );
    106 // Only in admin. Assume that theme authors know what they're doing.
    107 if ( intval( $content_width ) > 0 && 'edit' === $context ) {
    108 $max_width = min( intval( $content_width ), $max_width );
    109 }
    110 }
    111 // $size == 'full' has no constraint
    112 else {
    113 $max_width = $width;
    114 $max_height = $height;
    115 }
    Questo codice è spiegato qui: https://core.trac.wordpress.org/brow...s/media.php#L0
    Ultima modifica di danielepalmas88; 06-06-2017 a 10:50

  4. #4
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,654
    Questa funzione dovrebbe forzare le dimensioni per i formati predefiniti.
    In questa guida viene descritto come (volendo) bloccare la generazione di alcuni formati (non l'ho provata).
    Se l'immagine in upload è troppo pesante puoi bloccare almeno l'upload cosi' che l'utente dovrà almeno ridimensionarsi le immagini in modo che abbiano un pesa massimo da te scelto.

  5. #5
    Ottimo, grazie mille. Quella guida, unita al codice che ho appena trovato, dovrebbero fare al caso mio!
    codice:
    add_filter( 'wp_generate_attachment_metadata', 'delete_fullsize_image' );
    function delete_fullsize_image( $metadata )
    {
        $upload_dir = wp_upload_dir();
        $full_image_path = trailingslashit( $upload_dir['basedir'] ) . $metadata['file'];
        $deleted = unlink( $full_image_path );
    
        return $metadata;
    }

    EDIT: Purtroppo il codice che ho trovato non funge. Ora vedo se riesco a trovare qualche plugin che elimini le foto originali.

    EDIT 2: Anche il plugin "Lean Media" sembrerebbe perfetto a tal scopo, ma purtroppo l'ho provato, e non fa ciò che dice. Probabile che le più recenti versioni di wordpress invalidino certe functions che qualche anno fa' funzionavano.



    EDIT 3: Ho trovato questa roba, che finalmente funziona: https://github.com/cminatti/wp-delete-original-image
    Purtroppo non fa esattamente ciò che vorrei io, ma con i giusti accorgimenti si adatta comunque al caso. Praticamente questo plugin ridimensiona l'immagine originale alla stessa grandezza del ridimensionamento che abbiamo impostato su 'large'. Quindi se proprio non ci serve la versione 'large' dell'immagine, vorremmo farne a meno, e decidiamo di limitarne i danni, basta impostare - dal menu settings > media - le dimensioni massime di height e lenght del file 'large' su 5 o 10 pixel, cosicché sia la foto large che original verranno ridimensionate e salvate in formato minuscolo, senza occupare spazio prezioso. Attenzione: se impostiamo la foto 'large' su 0 e 0, la foto large non verrà creata, dunque il plugin, non trovandola, lascerà il file originale grande così com'è, senza ridimensionarlo.
    Per ora è l'unica soluzione (poco ortodossa) che ho trovato. Tutti gli altri comandi via function.php od i plugins che promettevano di eliminare direttamente il file originale si sono rivelati obsoleti.
    Ultima modifica di danielepalmas88; 06-06-2017 a 14:28

  6. #6
    Chiedo scusa, ma ho bisogno di riesumare il topic per fare un'altra domanda, sempre relativa al file functions.php e che concerne immagini grandi.

    Le recenti versioni di wordpress hanno aggiunto alla funzione dei media, una nuova misura intermedia, denominata "medium_large".
    Tale versione salva una copia delle immagini a 768px di larghezza come default, senza porre limiti di altezza.
    E la brutta notizia è che wp impone tale novità senza possibilità di controllo. Nel menu settings > media potremo infatti definire le proprietà solamente delle versioni small, medium e large. Quella medium_large è nascosta di default.

    Cosa significa questo? Che ogni volta che carichiamo un'immagine grossa, ci sarà un'ulteriore copia medium_large imposta da wp, che va ad occupare un sacco di storage inutilmente (per chi non ha necessità di averla).

    A quanto leggo, l'unico modo di modificare le proprietà dei media medium_large è di farlo mediante la funzione update_option() che è la seguente:

    codice:
    <?php update_option( $option, $new_value, $autoload ); ?>
    Essendo io non all'altezza della situazione, qualcuno potrebbe aiutarmi nel comporre tale suddetto codice?


    Devo purtroppo far presente che tutte le maniere alternative di ovviare a questo problema relativo al 'srcset' e le sue 'sizes attributes' mediante functions.php non è andato a buon fine: ho provato ognuno dei seguenti codici (dati per funzionanti da altri utenti in stack over flow), ma il mio wp continua a creare sempre e a prescindere quella dannata foto in versione 768x??? px, ignorando le functions.

    codice:
    ///// TEST NUMERO 1 \\\\\
    add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );
    
    ///// TEST NUMERO 2 \\\\\
    remove_filter( 'the_content', 'wp_make_content_images_responsive' );
    
    
    ///// TEST NUMERO 3 \\\\\
    function disable_srcset( $sources ) {
        return false;
    }
    add_filter( 'wp_calculate_image_srcset', 'disable_srcset' );
    
    
    ///// TEST NUMERO 4 \\\\\
    add_filter( 'wp_calculate_image_srcset', function( $sources )
    {
        foreach( $sources as &$source )
        {
            if( isset( $source['url'] ) )
                $source['url'] = set_url_scheme( $source['url'], 'https' );
        }
        return $sources;
    
    }, PHP_INT_MAX );
    
    
    ///// TEST NUMERO 5 \\\\\
    function filter_max_srcset( $max_width, $size_array ) {
    if ( $size_array[0] === 300 ) {
    $max_width = 1;
    }
    
    return $max_width;
    }
    add_filter( 'max_srcset_image_width', 'filter_max_srcset', 10, 2 );
    Ultima modifica di danielepalmas88; 07-06-2017 a 13:31

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.