Obține atributul produsului pentru Produse Simple în WooCommerce

12 apr. 2019, 18:12:17
Vizualizări: 38.1K
Voturi: 2

Am nevoie să obțin atributele produsului din WooCommerce, pentru tipul Produs Simplu, unele produse pot avea dropdown, dar multe opțiuni sunt sub formă de butoane radio.

Cum pot face acest lucru? Cum este posibil?

Cu variațiile nu am nicio problemă, dar pentru produsele simple nu le pot obține.

// Obține atributele pentru un produs simplu
$product_id = get_the_ID(); // sau ID-ul specific al produsului
$product = wc_get_product($product_id);

if ($product->is_type('simple')) {
    $attributes = $product->get_attributes();
    
    foreach($attributes as $attribute) {
        // Verifică dacă atributul este taxonomy sau custom
        if($attribute->is_taxonomy()) {
            $attribute_taxonomy = $attribute->get_taxonomy();
            $attribute_terms = $attribute->get_terms();
            
            foreach($attribute_terms as $term) {
                echo $term->name; // Afișează numele termenului
            }
        } else {
            $options = $attribute->get_options();
            foreach($options as $option) {
                echo $option; // Afișează opțiunile custom
            }
        }
    }
}
0
Toate răspunsurile la întrebare 2
2

Vei folosi metoda WC_Product get_attributes() care returnează un array de genul:

global $product;

if ( get_post_type( $post ) === 'product' && ! is_a($product, 'WC_Product') ) {
    $product = wc_get_product( get_the_id() ); // Obține obiectul WC_Product
}

$product_attributes = $product->get_attributes(); // Obține atributele produsului

// Afișare brută
echo '<pre>'; print_r( $product_attributes ); echo '</pre>';

Ar trebui să funcționeze (pentru atributele reale ale produsului).


Dacă folosești plugin-uri terțe, cum ar fi adaosuri de produs de exemplu, acestea adaugă câmpuri personalizate la produs, dar ele nu sunt atribute de produs...

12 apr. 2019 18:17:39
Comentarii

nu funcționează.

abu abu abu abu
24 oct. 2020 06:06:32

Aceasta obține un array cu toate atributele, care poate fi folosit pentru a obține un atribut individual prin înlocuirea print_r($product_attributes) cu ceva de genul print_r($product_attributes['pa_color']), însă asta returnează doar un ID al termenului, așa că ar fi nevoie de mai multe acțiuni pentru a obține titlul termenului din acel ID.

Nathan Nathan
25 oct. 2021 19:06:00
0

Bazându-se pe răspunsul lui Loic pentru un atribut de tip pa_manufacturer:

if ( get_post_type( $post ) === 'product' && ! is_a($product, 'WC_Product') ) {
    $product = wc_get_product( get_the_id() ); // Obține obiectul WC_Product
}

$product_attributes = $product->get_attributes(); // Obține atributele produsului

// Afișare
$manufacturer_id = $product_attributes['pa_manufacturer']['options']['0']; // returnează ID-ul termenului
$manufacturer_name = get_term( $manufacturer_id )->name; // obține numele termenului din ID
echo '<p class="manufacturer">'.$manufacturer_name.'</p>'; // afișează numele real al termenului
25 oct. 2021 19:10:46