Acasă » Blog » Woocommerce. Eliminarea galeriei de imagini pentru toate produsele

Woocommerce. Eliminarea galeriei de imagini pentru toate produsele

Share this post on social!
Programare & dezvoltare web custom

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:

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:

  1. Editura Orizonturi
  2. Romanian Water Technologies

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.

Lasă un răspuns

Traian Constantin Predan

Traian Constantin Predan

Inginer absolvent al Politehnicii București proiectează și construiește sisteme online. Lucrează proiecte extrem de diverse, îi plac viziunile noi care provoacă la dezvoltarea unor soluții tehnice eficiente și stabile.