Ottenere gli attributi del prodotto per un Prodotto Semplice in WooCommerce

12 apr 2019, 18:12:17
Visualizzazioni: 38.1K
Voti: 2

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');
0
Tutte le risposte alla domanda 2
2

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...

12 apr 2019 18:17:39
Commenti

non funziona.

abu abu abu abu
24 ott 2020 06:06:32

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.

Nathan Nathan
25 ott 2021 19:06:00
0

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
25 ott 2021 19:10:46