Ein Filter für die Anzahl der Produktspalten in WooCommerce

cat 701063 1920
Bildquelle: Pixabay, KaKnogler

Anforderung: drei Produktspalten auf der Shopstartseite, fünf Produktspalten in den Kategorien und Tags, vier Spalten für Related, Upsells etc. in einem WooCommerce Shop – dazu jeweils gleich die passende CSS-Klasse, und möglichst wenig Modifkationen an den Originaltemplates. Nach einem Blick in Quelltext und die Template-Verzeichnisse im Plugin WooCommerce entstand folgender Ansatz:

4cols
Vier Produktspalten in WooCommerce

Modifiziert wurde nur das Template loop-start.php mit folgendem Inhalt (ohne Kommentare):

<ul class="products">

Die zu erwartenden Modifikationen bei Updates dürften sich hier in überschaubaren Grenzen halten.

Um es für eigene Zwecke verwenden zu können, empfiehlt sich ein eigenes oder ein Child-Theme, wohin die Datei in den Ordner woocommerce/loop kopiert, und wie nachfolgend modifiziert wird:

<ul class="<?php echo pptf_woo_products_classes(); ?>">

In der functions.php wird folgendes eingefügt

/* filter für CSS Klassen */
function pptf_woo_products_classes() {
$classes[] = 'products';
return implode(' ', apply_filters('pptff_product_classes',$classes));
}

/* Anzahl der Spalten, je nach Bedingung, lässt sich natürlich auch über Theme-Settings steuern */
function pptf_return_cols() {
if ( is_shop() ) return 3;
elseif ( ( is_product_category() || is_product_tag() ) ) return 5; 
elseif ( ( is_product() ) ) return 4;
else return 4;
}
add_filter( 'loop_shop_columns', 'pptf_return_cols', 999 ); 

/* Anpassung der CSS-Klasse an Spaltenanzahl */
function pptf_return_cols_classes( $classes ) {
$number = pptf_return_cols();
$classes[] = 'row columns-' . $number; // *
return $classes;
}
add_filter( 'pptff_product_classes', 'pptf_return_cols_classes' );

Shopstartseite

3cols

Related (auf Produktseite)

4cols

Produktkategorie

5cols

*) css klassen dem theme anpassen, ansonsten CSS dafür selber schreiben

Manche Themes erzwingen eine bestimmte Anzahl von Spalten und brechen nach einer vordefinierten Anzahl um. Das CSS dafür muss dann mehr oder weniger mühsam aufgehoben werden.

Beispiel-CSS

@media (min-width: 768px) {
	
.products:before,
.products:after {
	content:"";
	display:table;
	clear:both;		
	}
	
.products {
    display: block;
    width: 104.09836065574%;
    margin-left: -2.0491803278689% !important;
    margin-right: -2.0491803278689% !important;
  }	
 
.products > * {
    display:inline;
	float:left;
    margin-left: 2.0491803278689% !important;
    margin-right: 2.0491803278689% !important;
}

.row.columns-9 > * {
    width: 6.9849726775956%;
}
.row.columns-9 > *:nth-child(9n+1) {
    clear: left;
}
.row.columns-8 > * {
    width: 8.4016393442623% !important;
}
.row.columns-8 > *:nth-child(8n+1) {
    clear: left;
}
.row.columns-7 > * {
    width: 10.151639344262% !important;
}
.row.columns-7 > *:nth-child(7n+1) {
    clear: left;
}
.row.columns-6 > * {
    width: 12.568306010929% !important;
 }
.row.columns-6 > *:nth-child(6n+1) {
    clear: left;
}
.row.columns-5 > * {
    width: 15.901639344262% !important;
}
.row.columns-5 > *:nth-child(5n+1) {
    clear: left;
}
.row.columns-4 > * {
    width: 20.901639344262% !important;
}
.row.columns-4> *:nth-child(4n+1) {
    clear: left;
}
.row.columns-3 > * {
    width: 29.234972677596% !important;
}
.row.columns-3 > *:nth-child(3n+1) {
    clear: left;
}
.row.columns-2 > * {
    width: 45.901639344262% !important;
}  

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable