WOOT - WooCommerce Active Products Tables

Variationen als eigene Zeilen in einer WooCommerce-Produkttabelle anzeigen

Um in einer WooCommerce-Produkttabelle Variationen als eigene Zeilen anzuzeigen, müssen Sie zuerst wissen, was die Tabelle standardmäßig auflistet: eine Zeile pro Produkt. Ein variables Produkt erhält eine einzige Zeile, und seine Variationen öffnen sich über die Schaltfläche select [N] in einem Popup. Je nach Bedarf gibt es drei Wege: eine Tabelle mit allen Variationen eines Produkts, eine auf eine Kategorie beschränkte Tabelle, bei der die Variationen einen Klick entfernt sind, oder eine eigene Tabelle, die die Variationen vieler Produkte als Zeilen auflistet und mit etwas Code eingerichtet wird. Jeder Weg wird unten mit seinen Grenzen beschrieben.

Warum eine WooCommerce-Produkttabelle eine Zeile pro variablem Produkt zeigt

In WooCommerce sind ein variables Produkt und seine Variationen verschiedene Beitragsarten. Das Produkt ist ein product, und jede Variation (Rot / L, Blau / M) ist ein eigener product_variation-Beitrag, der zu ihm gehört. Eine Variation hat einen eigenen Preis, eine eigene Artikelnummer, einen eigenen Lagerbestand und ein eigenes Bild, aber keine eigenen Kategorien, Schlagwörter oder Attributbegriffe: Diese bleiben beim übergeordneten Produkt, und die Variation speichert nur, für welche Attributwerte sie steht.

Die [woot]-Tabelle fragt Produkte ab, genauso wie die Shop-Seite. Deshalb zeigt sie das übergeordnete Produkt nur einmal, deshalb zeigt ihre Zelle Preis (Price) eine Preisspanne, und deshalb zeigt die Spalte Warenkorb (Cart) select [N] statt einer Schaltfläche In den Warenkorb (Add to cart). Diese Schaltfläche und die Schaltfläche Var.[N] der Spalte Variationen (Variations) öffnen ein Popup, das die Variationen als Zeilen auflistet, jeweils mit einem Mengenfeld und einer eigenen Schaltfläche In den Warenkorb (Add to cart). Wie Sie Spalten, Sortierung und Seitenaufteilung dieses Popups ändern, steht in Variations-Popup anpassen.

Plugins, die einzelne Variationen im Shop anzeigen, tun das, indem sie die Shop-Abfrage von WooCommerce ändern. Die Tabelle führt eine eigene Abfrage aus, daher fügen diese Plugins ihr keine Variationen hinzu.

Alle Variationen eines Produkts als Tabellenzeilen: [woot_variations]

Der Shortcode [woot_variations] gibt die Variationen eines variablen Produkts als vollständige Tabelle direkt auf der Seite aus, statt in einem Popup:

[woot_variations id=49]

id ist die ID des variablen Produkts, nicht die einer Tabelle. Jede Variation ist eine Zeile mit ihrem Titel (dem Produktnamen plus ihren Attributwerten, etwa T-shirt - Red, L), Preis, Lagerbestand und einer Warenkorb-Zelle mit Mengenfeld, Checkbox und einer Schaltfläche In den Warenkorb (Add to cart). Die Checkboxen arbeiten mit dem Link add selected in der Kopfzeile der Warenkorb-Spalte zusammen, sodass ein Kunde mehrere Variationen markieren, Mengen festlegen und alles mit einem Klick in den Warenkorb legen kann. Damit eignet sich der Shortcode gut als Bestellformular für Produkte mit vielen Größen oder Farben.

  • Spalten. Ohne das Attribut columns verwendet die Tabelle WOOT → Einstellungen (Settings) → Spalten der Variationen (Variations columns), dieselbe Liste wie im Popup. Nur für eine Tabelle legen Sie sie mit dem Attribut fest: [woot_variations id=49 columns='thumbnail,post_title,sku,price,stock_quantity,add_to_cart'].
  • Zeilen pro Seite. Alle Variationen werden auf einmal geladen und im Browser auf Seiten aufgeteilt, standardmäßig 10 pro Seite. per_page=-1 zeigt sie alle an, per_page_position='b' setzt die Seitennavigation unter die Tabelle (t, b, tb oder none).
  • Sortierung. Die Zeilen sind nach Titel von A bis Z sortiert. orderby und order ändern das, zum Beispiel orderby='id' order='asc' für die Reihenfolge, in der die Variationen erstellt wurden. Die Zeilen werden im Browser nach dem Inhalt der jeweiligen Spalte sortiert, daher muss die Spalte id unter den Spalten sein, damit das funktioniert.
  • Auf der einzelnen Produktseite. Lassen Sie id weg, dann nimmt der Shortcode das Produkt der aktuellen Seite. Er funktioniert in einer Produktseiten-Vorlage (Elementor, Vorlage eines Block-Themes) oder per Hook eingefügt, wie in Shortcodes in die einzelne Produktseite einfügen gezeigt. Auf einer Seite, die keine Produktseite ist, gibt er ohne id den Hinweis WOOT: Set product id please in the shortcode attribute! aus.

Nur globale Attribute (unter Produkte → Attribute angelegt) werden dem Titel der Variation hinzugefügt und können als Spalten angezeigt werden, etwa pa_size. Werte benutzerdefinierter Attribute, die direkt in ein Produkt eingegeben wurden, erscheinen nicht.

Eine Tabelle für eine Kategorie, Variationen einen Klick entfernt

Oft ist die Anfrage hinter „alle Variationen anzeigen“ enger gefasst: eine Tabelle pro Produktlinie, in der sich jedes variable Produkt leicht kaufen lässt. Erstellen Sie eine Tabelle, öffnen Sie ihre Registerkarte Vordefinition (Predefinition) und tragen Sie unter Eingeschlossene Taxonomie (Included taxonomy) die Begriffs-ID der Kategorie ein, zum Beispiel product_cat:25 (mehrere Kategorien: product_cat:25,26). Die Tabelle zeigt dann nur Produkte dieser Kategorie, und die Schaltflächen select [N] öffnen die Variationen des jeweiligen Produkts. Die FAQ zu einer anderen Tabelle für jede Kategorie zeigt dieselbe Einrichtung über mehrere Seiten.

Bei einer Kategorie mit nur wenigen variablen Produkten ist die direkteste Lösung eine Seite mit je einem [woot_variations] pro Produkt, jeweils unter einer eigenen Überschrift.

Variationen vieler Produkte als eigene Zeilen

Die Tabelle hat keinen Schalter, der jedes Produkt in seine Variationszeilen verwandelt. Das gelingt mit dem Hook woot_wp_query_args, der die Abfrage einer Tabelle erhält, bevor sie ausgeführt wird. Der Shortcode [woot_variations] arbeitet intern genauso: Er fragt Beiträge vom Typ product_variation ab. Erstellen Sie dafür eine eigene Tabelle, legen Sie ihre Spalten fest (Titel (Title), Artikelnummer (SKU), Preis (Price), Lagerbestand, Warenkorb (Cart) und die benötigten Attributspalten) und fügen Sie Folgendes hinzu:

/*
 * Products table #25 lists variations instead of products.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter('woot_wp_query_args', function ($args, $table_id) {
    if ((int) $table_id !== 25) { // the ID of your variations table
        return $args;
    }

    // Variations have no categories: find the variable parent products first
    $tax_query = [
        [
            'taxonomy' => 'product_type',
            'field'    => 'slug',
            'terms'    => ['variable'],
        ],
        [
            'taxonomy' => 'product_cat',
            'field'    => 'slug',
            'terms'    => ['t-shirts'], // category slugs; remove this block for all categories
        ],
    ];

    $parent_ids = get_posts([
        'post_type'      => 'product',
        'post_status'    => 'publish',
        'posts_per_page' => -1,
        'fields'         => 'ids',
        'tax_query'      => $tax_query,
    ]);

    $args['post_type'] = 'product_variation';
    $args['post_parent__in'] = $parent_ids ? $parent_ids : [0];

    return $args;
}, 10, 2);

Fügen Sie die Tabelle mit [woot id=25] ein. Jede veröffentlichte Variation der ausgewählten Produkte hat nun eine eigene Zeile mit eigenem Preis, eigenem Lagerbestand und eigener Schaltfläche In den Warenkorb (Add to cart). Deaktivierte Variationen werden als private Beiträge gespeichert und bleiben daher draußen, solange die Option für den Beitragsstatus der Tabelle auf ihrem Standardwert „publish“ steht. Kennen Sie die Einschränkungen, bevor Sie darauf eine Shop-Seite aufbauen:

  • Kategorie- und Attributregeln gelten nicht für Variationszeilen. Variationen tragen keine Begriffe, daher finden Eingeschlossene Taxonomie (Included taxonomy) in der Vordefinition sowie Kategorie- oder Attributelemente im Filter der Tabelle in dieser Tabelle nichts. Wählen Sie die Kategorien im Code aus, wie oben. Preis, Artikelnummer, Lagerbestand und die Titelsuche funktionieren weiter, weil Variationen diese Felder haben.
  • Der Titel ist reiner Text. Eine Variation hat keine eigene Seite, daher ist ihre Zelle Titel (Title) kein Link. Fügen Sie die Spalte Vorschaubild (Thumbnail) hinzu, wenn Kunden den Artikel sehen sollen; sie zeigt das eigene Bild der Variation.
  • „Beliebige“ Variationen lassen sich nicht aus einer Zeile kaufen. Eine Variation mit der Einstellung Any Size verlangt, dass der Kunde eine Größe wählt, und eine Zeile hat dafür kein Feld; WooCommerce lehnt das Hinzufügen zum Warenkorb daher ab. Geben Sie solchen Variationen konkrete Werte.
  • Zeilenanzahl. Hundert Produkte mit je zwanzig Variationen ergeben eine Tabelle mit zweitausend Zeilen. Lassen Sie die Seitenaufteilung aktiv und die Zahl der Zeilen pro Seite moderat.

Welcher Ansatz der richtige ist

Sie benötigenVerwenden Sie
Alle Variationen eines Produkts, auf seiner Produktseite oder auf einer beliebigen Seite[woot_variations id=...]
Produkte einer Kategorie, Variationen per KlickEine Tabelle mit Eingeschlossene Taxonomie (Included taxonomy) in der Vordefinition
Ein Bestellformular mit jeder Variation einer Produktlinie als ZeileEine eigene Tabelle und das Snippet für woot_wp_query_args
Andere Spalten oder Sortierung im PopupSpalten der Variationen (Variations columns) in den Einstellungen und der Hook woot_vurgc_shortcode_data

Wenn die Variationen nicht angezeigt werden

  • [woot_variations] zeigt No Data!: Die ID gehört zu einem einfachen Produkt, oder alle seine Variationen sind deaktiviert oder nicht veröffentlicht.
  • Der Shortcode gibt den Hinweis „set product id“ aus: Fügen Sie id hinzu oder setzen Sie ihn dorthin, wo ein Produkt die aktuelle Seite ist.
  • Die mit dem Snippet erstellte Variationstabelle ist leer: Prüfen Sie die Tabellen-ID im Code, die Kategorie-Slugs und dass die Tabelle in der Vordefinition keine Regel unter Eingeschlossene Taxonomie (Included taxonomy) hat.
  • Eine Zeile hat keine Schaltfläche In den Warenkorb (Add to cart): Die Variation hat keinen Preis oder ist nicht vorrätig, und WooCommerce hält sie nicht für kaufbar.

Für Layouts, die hier nicht abgedeckt sind, fragen Sie im WOOT-Supportforum nach.