Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

Produktdetails: alle Daten eines Produkts auslesen

Produktdetails: alle Daten eines Produkts auslesen

~15 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026

Jetzt wird es interessant: Ein einzelnes Magento-Produktobjekt trägt DEUTLICH mehr Daten als nur name und price – und ein Großteil davon steckt in custom_attributes, einem flachen Array statt eines direkten Feldes.

fetchProductBySku() im API-Client

src/api/magentoApi.js
// ... BASE_URL, ACCESS_TOKEN, PAGE_SIZE, magentoFetch(), fetchProducts() wie in Kapitel 8 ...

export async function fetchProductBySku(sku) {
  const produkt = await magentoFetch(`/products/${encodeURIComponent(sku)}`);
  return produkt;
}

encodeURIComponent(sku) ist wichtig: Manche SKUs enthalten Sonderzeichen wie Leerzeichen oder Schrägstriche, die in einer URL kodiert werden müssen – GENAU dasselbe Muster wie in "React für Einsteiger" Kapitel 22.

Die rohe Antwortstruktur eines Produkts

Bevor wir Code schreiben, ein Blick auf eine ECHTE (gekürzte) Magento-Produktantwort – rufen Sie GET /V1/products/IHRE-SKU mit dem Token aus Kapitel 5 auf, um Ihre eigene, vollständige Version zu sehen:

{
  "sku": "WSH12-BLUE",
  "name": "Blaues Baumwollhemd",
  "price": 39.99,
  "status": 1,
  "custom_attributes": [
    { "attribute_code": "description", "value": "Ein bequemes Baumwollhemd..." },
    { "attribute_code": "color", "value": "58" },
    { "attribute_code": "image", "value": "/w/s/wsh12-blue_1.jpg" }
  ],
  "media_gallery_entries": [ ... ],
  "extension_attributes": { "stock_item": { ... } }
}

Achtung: status: 1 bedeutet "aktiviert", NICHT "auf Lager" – Lagerbestand steckt wie oben zu sehen in extension_attributes.stock_item, dazu mehr in Kapitel 11. Und color: "58" ist KEIN Text, sondern eine interne Attribut-Options-ID – den lesbaren Farbnamen ("Blau") liefert die API standardmäßig NICHT mit, das ist eine bekannte Einschränkung, die wir gleich einordnen.

custom_attributes sicher auslesen: eine Hilfsfunktion

Da custom_attributes ein ARRAY ist (nicht ein Objekt mit direktem Feldzugriff), brauchen wir eine kleine Hilfsfunktion, um an einen bestimmten Wert zu kommen:

src/api/magentoApi.js
// ... vorheriger Code ...

export function leseCustomAttribute(produkt, attributeCode) {
  const attribut = produkt.custom_attributes?.find(
    (a) => a.attribute_code === attributeCode
  );
  return attribut?.value ?? null;
}

?.find(...) und ?? null fangen zwei häufige Fälle sicher ab: custom_attributes könnte fehlen (Optional Chaining), und das gesuchte Attribut selbst existiert bei diesem konkreten Produkt vielleicht nicht (Nullish Coalescing).

ProductDetailPage.jsx: alle Daten anzeigen

src/pages/ProductDetailPage.jsx
import { useEffect, useState } from 'react';
import { useParams } from 'react-router-dom';
import { fetchProductBySku, leseCustomAttribute } from '../api/magentoApi';

function ProductDetailPage() {
  const { sku } = useParams();
  const [produkt, setProdukt] = useState(null);
  const [ladend, setLadend] = useState(true);

  useEffect(() => {
    setLadend(true);
    async function laden() {
      const data = await fetchProductBySku(sku);
      setProdukt(data);
      setLadend(false);
    }
    laden();
  }, [sku]);

  if (ladend) {
    return <p>Lade Produkt...</p>;
  }

  const beschreibung = leseCustomAttribute(produkt, 'description');

  return (
    <div>
      <h1>{produkt.name}</h1>
      <p>SKU: {produkt.sku}</p>
      <p>{produkt.price} €</p>
      {beschreibung && (
        <div dangerouslySetInnerHTML={{ __html: beschreibung }} />
      )}
    </div>
  );
}

export default ProductDetailPage;

Achtung: dangerouslySetInnerHTML ist bewusst gewählt: Magentos description-Attribut enthält häufig bereits HTML-Formatierung (Absätze, Fettschrift) aus dem WYSIWYG-Editor des Admin-Panels – ein normaler React-Textausdruck würde diese Tags als sichtbaren Text statt als Formatierung anzeigen. WICHTIG: Nutzen Sie dangerouslySetInnerHTML NUR mit Inhalten aus einer vertrauenswürdigen Quelle (hier: IHR eigener Magento-Admin) – bei Nutzereingaben wäre das ein XSS-Sicherheitsrisiko.

Weitere häufig genutzte custom_attributes

  • short_description – Kurzbeschreibung, ebenfalls oft mit HTML.
  • meta_title/meta_description – SEO-Metadaten des Produkts.
  • special_price – ein reduzierter Preis, falls im Admin gesetzt.
  • weight – Gewicht, relevant für Versandberechnungen.

Tipp: Öffnen Sie das custom_attributes-Array Ihres eigenen Test-Produkts im Browser (z. B. über console.log(produkt.custom_attributes)) und probieren Sie leseCustomAttribute() mit verschiedenen attribute_code-Werten aus – so lernen Sie am schnellsten, welche Attribute IHR konkreter Shop tatsächlich pflegt.