Suntem în paradigma WordPress + Woocommerce și ne confruntăm cu o situație de următorul gen:
Fiecare produs are o galerie de imagini asociată. În pagina produsului (condiția is_product(), apropo) Woocommerce afișează galeria de imagini sub formă de thumbnail-uri sub imaginea principală a produsului.
Ce urmărim:
Vrem să NU afișăm această galerie pentru că uneori nu este relevantă pentru produs.
Am identificat 3 soluții tehnice pentru îndeplinirea acestui scop, fiecare dintre ele adaptată la un context specific.
Site-urile create la Sector web pe care s-au aplicat aceste trei soluții de programare și personalizare a pluginului Woocommerce sunt:
Hai să le urmărim.
Replicare template Woocommerce în tema copil. Soluția 1
Am replicat template-ul Woocommerce single-product/product-image.php și am comentat linia de cod prin care se apelează template-ul single-product/product-thumbnails.php
//do_action( 'woocommerce_product_thumbnails' );
În acest mod, secțiunea de sub poza principală nu mai este afișată.
Eliminare galerie pentru fiecare produs prin interogare bază de date. Soluția 2
Pentru fiecare produs care rezidă în baza de date în tabelul wp_posts sub formă de post_type de valoare product, avem în tabelul wp_postmeta o linie care indică id-urile imaginilor grupate ca și galerie de imagini produs. Cheia acestei valori meta este “_product_image_gallery“. Ceea ce putem face este sa eliminăm (ștergem) din tabela wp_postmeta aceste linii cu valoarea meta_key=_product_image_gallery pentru toate produsele (oricare post_id).
Comanda mysql este următoarea și se poate rula din intwerfața Phpmyadmin:
DELETE FROM `wp_postmeta` WHERE `meta_key`='_product_image_gallery'
Filtrul de afișare a imaginilor. Soluția 3
Eliminare prin intervenție în cârligul-ul de tip filtru responsabil pentru afișarea imaginilor produsului în pagina de produs, atât cea principală cât și thumbnail-urile galeriei de imagini.
Atât product-image.php cât și product-thumbnails.php afișează imaginea principală a produsului respectiv imaginile din galeria de imagini ale produsului prin intermediul cârligului de tip filtru (filter hook, lb. en.) “woocommerce_single_product_image_thumbnail_html“.
Ideea este ca în acest filtru să întoarcem în cazul fiecărui thumbnail spațiu gol, adică nu vom afișa nimic.
Apelul filtrului pentru thumbnail-uri este
global $product;
$attachment_ids = $product->get_gallery_image_ids();
if ( $attachment_ids && $product->get_image_id() ) {
foreach ( $attachment_ids as $attachment_id ) {
echo apply_filters( 'woocommerce_single_product_image_thumbnail_html', wc_get_gallery_image_html( $attachment_id ), $attachment_id ); // phpcs:disable WordPress.XSS.EscapeOutput.OutputNotEscaped
}
}
Deci cumva va trebui să ne infiltrăm și să eliminăm afișarea pentru orice valoare a $attachment_id diferită de id-ul imaginii principale $thumbnail_id. Această valoare este obținută in product-image.php sub forma următoare:
$post_thumbnail_id = $product->get_image_id();
Ca urmare, infiltrarea noastră s-ar putea face astfel:
add_filter('woocommerce_single_product_image_thumbnail_html','sweb_fara_galerie_imagini', 10, 2);
/**
* Nu afișez galeria de imagini ale produsului în pagina de produs
**/
function sweb_fara_galerie_imagini($html, $attachment_id){
global $product;
//obtin id-ul imaginii principale a produsului
$post_thumbnail_id = $product->get_image_id();
if ($attachment_id == $post_thumbnail_id){
return '';
}
return $html;
}
Soluțiile de programare Woocommerce. Concluzii
A treia soluție este cea mai elegantă, nu modifică fișiere core, nu replică template-urile Woocommerce pe care la un eventual update al plugin-ului va trebui să le actualizăm cu noile versiuni.
Dar cea mai eficientă soluție de departe este a doua dintre cele trei. Prin eliminarea galeriilor produselor încărcarea este mai mică. Dar nu totdeauna se pretează situațiilor concrete.
Află detalii privind realizarea site-urilor pe WordPress
Creare site WordPress
Sau ia legatura cu noi aici