Brand pod produktem na stronie zamówienia

Klient zgłosił takie zapotrzebowanie, żeby na stronie zamówienia pod produktem wyświetlał się brand produktu. Wynika to z tego, że ma wiele towarów o podobnych nazwach ale od innych producentów i osobie obsługującej zamówienia i magazyn ułatwi to życie.

Oto gotowy kod z uwzględnieniem, że produkty mogą być wariantami.

add_action('woocommerce_before_order_itemmeta', 'add_brand_above_variation_admin', 10, 3);

function add_brand_above_variation_admin($item_id, $item, $order) {
     // Sprawdź, czy to produkt (WC_Order_Item_Product)
    if (!is_a($item, 'WC_Order_Item_Product')) {
        return;
    }

    // Only in admin
    if (!is_admin()) return;

    $product = $item->get_product();
    if (!$product) return;

    // Get brand terms from variation first
    $brand_terms = wp_get_post_terms($product->get_id(), 'product_brand');

    // Fallback to parent product if needed
    if (empty($brand_terms) && $product->is_type('variation')) {
        $brand_terms = wp_get_post_terms($product->get_parent_id(), 'product_brand');
    }

    if (!empty($brand_terms) && !is_wp_error($brand_terms)) {
        $brand_names = wp_list_pluck($brand_terms, 'name');
        $brand_label = implode(', ', $brand_names);

        echo '<div class="woocommerce-brand-info" style="margin-bottom: 5px;">';
        echo '<strong>Brand:</strong> ' . esc_html($brand_label);
        echo '</div>';
    }
}

Ten kod umieści nam nazwę brandu pod nazwą produktu. W kodzie strony powinno wyglądać to tak:

<tr class="woocommerce-table__line-item">
  <td class="woocommerce-table__product-name product">
    Awesome Product Name
    <div class="woocommerce-brand-info">Brand: Nike</div>  👈 Appears here!
    <div class="wc-order-item-variation">Size: L</div>
  </td>
</tr>

Wywołując funkcję musimy sprawdzić czy będziemy działać tylko na produkcie bo dostaniemy błąd krytyczny!!

🧠 Dlaczego tak się dzieje?

Hook woocommerce_before_order_itemmeta jest wywoływany dla każdego typu elementu zamówienia:

  • Produkt (WC_Order_Item_Product) ✅
  • Wysyłka (WC_Order_Item_Shipping) ❌
  • Podatek, kupon itp.

Dlatego musimy sprawdzić typ $item, zanim użyjemy get_product().

Przewijanie do góry