Dimensiune personalizată pentru imagini în Woocommerce

5 mai 2015, 19:40:40
Vizualizări: 20.6K
Voturi: 1

Woocommerce are trei dimensiuni predefinite pentru imagini. Dar pentru că există mai mult de trei dimensiuni diferite de containere, unele imagini sunt întotdeauna întinse sau comprimate. Prin urmare, calitatea imaginii și viteza paginii au de suferit. Woocommerce folosește, de exemplu, dimensiunea de catalog pentru imaginile din catalog și imaginile produselor asociate. WordPress oferă o metodă simplă pentru a genera dimensiuni personalizate pentru imagini. Am încercat să generez o dimensiune pentru produsele mele asociate:

add_action( 'after_setup_theme', 'jmt_theme_setup' );
function jmt_theme_setup() {
    add_image_size( 'related-thumb', 274, 274, true );
}

Există vreo modalitate de a introduce această dimensiune în imaginile produselor asociate din Woocommerce?

Mulțumesc pentru interes.

Cu respect, theo

2
Comentarii

Problema reală stă în CSS-ul WooCommerce. Cred că toate imaginile lor au width: 100%; height: auto;, ceea ce unele teme nu iau în considerare. Sugerez să suprascrieți acel CSS cu max-width: 100%; width: auto;.

Howdy_McGee Howdy_McGee
5 mai 2015 19:43:33

Da, pot confirma. Max-width:100%; reduce containerul imaginii produsului asociat la dimensiunea containerului imaginii din catalog. Dar schimbă și aspectul. Scopul meu sau mai degrabă ideea mea este de a personaliza dimensiunea imaginii.

timholz timholz
5 mai 2015 19:49:52
Toate răspunsurile la întrebare 3
3

Puteți suprascrie CSS-ul WooCommerce prin acest fragment de cod, Remi Corson:

<?php
add_filter( 'wp_head' , 'related_products_style' );

function related_products_style() {
   if( is_product() ) :
   ?>
   <style>
   .woocommerce .related ul.products li.product img, .woocommerce .related ul li.product img, .woocommerce .upsells.products ul.products li.product img, .woocommerce .upsells.products ul li.product img, .woocommerce-page .related ul.products li.product img, .woocommerce-page .related ul li.product img, .woocommerce-page .upsells.products ul.products li.product img, .woocommerce-page .upsells.products ul li.product img
   {
      width: 274px !important;
      height: 274px !important;
   }
   </style>
<?php
endif;
}
5 mai 2015 19:47:56
Comentarii

Mulțumesc pentru cod, dar suprascrierea CSS-ului nu aplică dimensiunile corecte ale imaginilor. Aceasta stabilește doar dimensiunea containerului.

timholz timholz
5 mai 2015 19:58:20

Am adăugat img la regulile CSS, poți încerca acum?

m4n0 m4n0
5 mai 2015 20:00:34

Mulțumesc pentru actualizare. Dar nu, acum proporțiile nu mai sunt pătrate și CSS-ul afectează doar containerul. Ceea ce am încercat să obțin este să introduc dimensiunea potrivită a imaginii. Dar, după cum înțeleg acum, acest lucru este destul de dificil de realizat.

timholz timholz
5 mai 2015 20:11:12
12

Există câteva opțiuni pe care le poți alege atunci când modifici dimensiunile imaginilor. Schimbarea imaginilor implicite WooCommerce este mai dificilă decât într-o instalare WordPress obișnuită, deoarece acestea sunt integrate în plugin.


Modificarea dimensiunilor imaginilor pentru produsele similare:

Am testat acest lucru și pare să funcționeze doar pentru produsele similare (deși sunt sigur că poate fi extins și în alte zone). Poate fi necesar să folosești Regenerate Thumbnails pentru a obține dimensiunile corecte.

Trebuie să includem totul într-un filtru wp:

function woo_init() {
    // Funcțiile de mai jos vor fi aici...
}
add_action( 'wp', 'woo_init' );

Am reușit să omit prima parte, setarea variabilei de interogare, și totuși să funcționeze, dar deoarece folosește un șablon generic content-product.php, nu aș avea încredere în această abordare. Așadar, vom seta o variabilă de interogare pentru a ne asigura că modificăm dimensiunea imaginii doar pentru produsele similare:

if( is_singular( 'product' ) ) {
    add_filter( 'woocommerce_related_products_args', function( $query_args ) {
        if( ! empty( $query_args ) ) {
            set_query_var( 'related_products', true );
        }

        return $query_args;
    } );
}

În continuare, trebuie să eliminăm acțiunea implicită loop_product_thumbnail și să o înlocuim cu una personalizată. Testăm dacă variabila de interogare related_products este setată și este TRUE înainte de a afișa noua imagine, altfel afișăm imaginea implicită.

remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
add_action( 'woocommerce_before_shop_loop_item_title',
    function() {
        $related = get_query_var( 'related_products' );
        if( TRUE == $related ) {
            echo woocommerce_get_product_thumbnail( 'related-thumb', 274, 274 );    // Noua dimensiune a imaginii
        } else {
            echo woocommerce_get_product_thumbnail();   // Dimensiunea implicită a imaginii
        }
    },
    10
);

CSS

WooCommerce folosește width: 100%; height: auto; pentru toate imaginile. Poți modifica acest lucru în max-width: 100%; width: auto; height: auto; și să ajustezi marginile / numărul de coloane pentru a obține aspectul dorit.

Modificarea dimensiunilor inițiale ale imaginilor

Poți modifica dimensiunile reale ale imaginilor folosite de WooCommerce urmând pașii de mai jos:

  • Autentifică-te în WordPress
  • Navighează la WooCommerce -> Produse -> Afișare (submeniu)
  • În partea de jos poți seta dimensiunile imaginilor pentru:
    • Imagini din catalog
    • Imaginea produsului individual
    • Miniaturile produselor
  • În final, poți instala Regenerate Thumbnails pentru a obține dimensiunile modificate.

O altă metodă este să setezi aceste dimensiuni la instalare:

function yourtheme_woocommerce_image_dimensions() {
    global $pagenow;

    if ( ! isset( $_GET['activated'] ) || $pagenow != 'themes.php' ) {
        return;
    }

    $catalog = array(
        'width'     => '400',   // px
        'height'    => '400',   // px
        'crop'      => 1        // true
    );

    $single = array(
        'width'     => '600',   // px
        'height'    => '600',   // px
        'crop'      => 1        // true
    );

    $thumbnail = array(
        'width'     => '120',   // px
        'height'    => '120',   // px
        'crop'      => 0        // false
    );

    // Dimensiunile imaginilor
    update_option( 'shop_catalog_image_size', $catalog );       // Miniaturi pentru categoriile de produse
    update_option( 'shop_single_image_size', $single );         // Imaginea produsului individual
    update_option( 'shop_thumbnail_image_size', $thumbnail );   // Miniaturi pentru galeria de imagini
}

add_action( 'after_switch_theme', 'yourtheme_woocommerce_image_dimensions', 1 );

Link-uri de referință WooCommerce:

5 mai 2015 19:58:00
Comentarii

Mulțumesc. Am încercat toate acestea. Dar se pare că singura soluție este să fac un compromis. Asta înseamnă o singură dimensiune pentru imaginile conexe și pentru cele din catalog. Mă întrebam doar dacă există o modalitate ușoară de a adăuga a patra dimensiune pentru imagini. Salutări, Theo

timholz timholz
5 mai 2015 20:04:54

@theo - Din păcate, nu cunosc nicio metodă. Teoretic, ai putea suprascrie Șablonul WooCommerce cu unul personalizat, să-ți creezi propria WP_Query și să generezi aceeași buclă, dar să apelezi imaginea personalizată în acest fel. S-ar putea să existe o altă metodă pe care nu am încercat-o niciodată, dar voi edita întrebarea mea cu ea și poate vei avea noroc.

Howdy_McGee Howdy_McGee
5 mai 2015 20:19:24

Mulțumesc mult pentru asta. Voi încerca și vă voi anunța.

timholz timholz
5 mai 2015 21:28:05

Ok, am încercat și nu am reușit. Cred că va trebui să mă mulțumesc cu această limitare. Dar mulțumesc pentru toate indiciile.

timholz timholz
6 mai 2015 21:06:08

@timholz Nu am o instalație WooCommerce activă pentru a experimenta cu asta. De îndată ce am ocazia, voi încerca și voi vedea la ce mă gândesc. Dacă descopăr ceva, te voi menționa și voi anunța sau dacă găsești tu o soluție mai bună, posteaz-o aici! Mult succes!

Howdy_McGee Howdy_McGee
6 mai 2015 21:07:30

Bună Howdy Mc Gee, mulțumesc pentru răspuns. Pentru moment am atribuit cea mai mare dimensiune pentru imaginile înrudite și cele din catalog. Arată ok, dar pierd puțin din viteză, deoarece imaginile din catalog trebuie redimensionate. Dar oricum, mulțumesc pentru grijă. :)theo

timholz timholz
7 mai 2015 11:22:12

@timholz Am găsit o soluție și am modificat răspunsul meu, adăugând soluția la început. Am luat teoria originală și am testat-o, ar trebui să funcționeze pentru produsele înrudite și probabil ai putea să o faci să funcționeze și pentru alte produse. Dacă ai constatat că a funcționat pentru tine, nu uita să apeși pe bifă pentru a arăta cititorilor viitori că a funcționat pentru tine!

Howdy_McGee Howdy_McGee
7 mai 2015 17:38:42

– Mulțumesc pentru efortul tău. Acum este prea târziu. Dar mâine voi testa codul și voi raporta.

timholz timholz
8 mai 2015 22:05:40

Salut Howdy McGee – nu am putut aștepta până mâine. Codul tău funcționează excelent. Condiționalul face magia. Mulțumesc foarte mult pentru timpul și efortul tău. Site-ul la care lucrez este în modul de dezvoltare, dar imediat ce va fi gata, îți voi trimite un link (doar în caz că ești interesat). Mulțumesc foarte mult. Cu stimă, Theo PS: Am încercat să te votez în sus, dar din păcate, reputația mea este insuficientă. Așadar, te votez în sus aici. Răspuns de top.

timholz timholz
8 mai 2015 23:14:56

@timholz Mă bucur că a funcționat pentru tine! Te rog să te asiguri că apeși bifa, astfel încât viitorii cititori să știe că acest răspuns a rezolvat întrebarea ta (comentariile sunt ascunse după un anumit timp). Aș sugera, de asemenea, să revii la orice alte întrebări pe care le-ai pus în trecut și să faci la fel (chiar dacă tu le-ai răspuns). Este o modalitate excelentă și ușoară de a câștiga reputație, precum și de a-ți arăta recunoștința!

Howdy_McGee Howdy_McGee
8 mai 2015 23:18:03

acesta este linkul:www.j-m-t.ch Acum am dimensiunile corecte ale imaginilor pentru produsele din catalog și cele similare. mulțumesc

timholz timholz
9 mai 2015 13:08:07

am observat un lucru. Produsele recomandate (când aspectul este setat pe lățime completă) folosesc, desigur, dimensiunea din catalog și din această cauză sunt neclare. Am încercat să adaptez aceeași metodă pentru această clasă, dar se pare că sunt tratate diferit.

timholz timholz
11 mai 2015 12:04:58
Arată celelalte 7 comentarii
0

Cred că este o problemă de CSS pentru că WooCommerce (enervant) folosește width: 100% când (după părerea mea) ar trebui să folosească max-width: 100%. Încearcă să suprascrii lățimea folosind width: auto, asta ar trebui să ajute.

5 mai 2015 19:48:11