Ottenere gli attributi del prodotto per un Prodotto Semplice in WooCommerce
Ho bisogno di ottenere gli attributi del prodotto da un prodotto in WooCommerce, di tipo Prodotto Semplice, alcuni prodotti possono avere attributi a tendina, ma molte opzioni sono come pulsanti radio.
Come posso farlo? Com'è possibile?
Con le variazioni non ho problemi, ma per i prodotti semplici non riesco a ottenerli.
// Ottieni l'oggetto prodotto
$product = wc_get_product($product_id);
// Ottieni tutti gli attributi del prodotto
$attributes = $product->get_attributes();
// Cicla attraverso gli attributi
foreach ($attributes as $attribute) {
// Nome dell'attributo
$attribute_name = $attribute->get_name();
// Ottieni i termini dell'attributo
$terms = wp_get_post_terms($product->get_id(), $attribute_name);
// Cicla attraverso i valori dell'attributo
foreach ($terms as $term) {
echo $term->name; // Stampa il nome del valore dell'attributo
}
}
Per ottenere un attributo specifico:
// Ottieni un attributo specifico (sostituisci 'pa_colore' con il tuo slug dell'attributo)
$attribute_value = $product->get_attribute('pa_colore');
Utilizzerai il metodo WC_Product
get_attributes()
che restituisce un array come:
global $product;
if ( get_post_type( $post ) === 'product' && ! is_a($product, 'WC_Product') ) {
$product = wc_get_product( get_the_id() ); // Ottiene l'oggetto WC_Product
}
$product_attributes = $product->get_attributes(); // Ottiene gli attributi del prodotto
// Output grezzo
echo '<pre>'; print_r( $product_attributes ); echo '</pre>';
Dovrebbe funzionare (per attributi reali del prodotto).
Ora, se utilizzi plugin di terze parti, come gli add-Ons per i prodotti ad esempio, questi aggiungono campi personalizzati al prodotto, ma non sono attributi del prodotto...

Questo ottiene un array di tutti gli attributi, che può essere usato per ottenere un singolo attributo sostituendo print_r($product_attributes)
con qualcosa come print_r($product_attributes['pa_color'])
tuttavia questo restituisce solo un ID del termine, quindi sarebbe necessario fare altro per ottenere il titolo del termine da quell'ID.

Basandosi sulla risposta di Loic per un attributo pa_manufacturer
:
if ( get_post_type( $post ) === 'product' && ! is_a($product, 'WC_Product') ) {
$product = wc_get_product( get_the_id() ); // Ottiene l'oggetto WC_Product
}
$product_attributes = $product->get_attributes(); // Ottiene gli attributi del prodotto
// Output
$manufacturer_id = $product_attributes['pa_manufacturer']['options']['0']; // restituisce l'ID del termine
$manufacturer_name = get_term( $manufacturer_id )->name; // ottiene il nome del termine dall'ID
echo '<p class="manufacturer">'.$manufacturer_name.'</p>'; // mostra il nome effettivo del termine
