Woocommerce: mostrare il prezzo della variazione predefinita nella lista prodotti?

30 ott 2017, 11:41:14
Visualizzazioni: 24.2K
Voti: 3

C'è un modo per forzare la visualizzazione del prezzo della Variazione Prodotto che ho impostato come predefinita nelle impostazioni della pagina prodotto, invece di mostrare il prezzo più basso e più alto?

Ho questo codice che mostra un solo prezzo, ma il prezzo mostrato non è quello della variazione predefinita:

/*******************************
    MOSTRA SOLO UN PREZZO PER LE VARIAZIONI
*********************************/

add_filter('woocommerce_variable_price_html', 'custom_variation_price', 10, 2);
function custom_variation_price( $price, $product ) {
     $price = '';
     $price .= woocommerce_price($product->get_price());
     return $price;
}

Screenshot delle impostazioni delle variazioni prodotto in WooCommerce

2
Commenti

Non lo è, perché in quella funzione invece della variazione predefinita, viene mostrato il prezzo più basso/scontato. Sebbene sia un duplicato di questo: https://stackoverflow.com/questions/36453795/obtaining-default-variation-price-on-a-variation-product-woocommerce Ho testato questo e funziona. Sospetto che l'op abbia usato questo come punto di partenza (stesso nome della funzione e variabili passate), ma non sono sicuro del motivo per cui non fosse sufficiente.

galingong galingong
2 nov 2017 13:55:37
Tutte le risposte alla domanda 5
1

Prova questo codice:

add_filter('woocommerce_variable_price_html', 'custom_variation_price', 10, 2);
function custom_variation_price( $price, $product ) {
    $available_variations = $product->get_available_variations();
    $selectedPrice = '';
    $dump = '';

    foreach ( $available_variations as $variation )
    {
        // $dump = $dump . '<pre>' . var_export($variation['attributes'], true) . '</pre>';

        $isDefVariation=false;
        foreach($product->get_default_attributes() as $key=>$val){
            // $dump = $dump . '<pre>' . var_export($key, true) . '</pre>';
            // $dump = $dump . '<pre>' . var_export($val, true) . '</pre>';
            if($variation['attributes']['attribute_'.$key]==$val){
                $isDefVariation=true;
            }   
        }
        if($isDefVariation){
            $price = $variation['display_price'];         
        }
    }
    $selectedPrice = wc_price($price);

//  $dump = $dump . '<pre>' . var_export($available_variations, true) . '</pre>';

    return $selectedPrice . $dump;
}
3 nov 2017 12:18:19
Commenti

Grazie per il tuo codice, ma penso che il tuo codice funzioni solo per una singola variazione. Ho aggiornato il codice e l'ho aggiunto nel post qui sotto

Abhinav bhardwaj Abhinav bhardwaj
31 lug 2019 21:41:16
0

Questa è la soluzione per mostrare il prezzo minimo come prezzo predefinito per i prodotti variabili:

add_filter('woocommerce_variable_price_html','shop_variable_product_price', 10, 2 );

function shop_variable_product_price( $price, $product ){
    // Ottiene il prezzo regolare minimo tra le variazioni
    $variation_min_reg_price = $product->get_variation_regular_price('min', true);

    if(!empty($variation_min_reg_price)) {
        // Formatta il prezzo minimo
        $price = woocommerce_price( $variation_min_reg_price );
    }
    else {
        // Usa il prezzo regolare del prodotto se non ci sono variazioni
        $price = woocommerce_price( $product->regular_price );
    }

    return $price;
}
2 nov 2017 15:16:36
1

Aggiornamento del codice di @ Abhinav per mostrare il prezzo minimo nel caso non sia impostata una variazione predefinita:

/**
 * Mostra il prezzo della variazione predefinita
 * Se non esiste una variazione predefinita, mostra il prezzo minimo
 */

add_filter('woocommerce_variable_price_html', 'custom_variation_price', 10, 2);
function custom_variation_price($price, $product) {
    $available_variations = $product->get_available_variations();
    $selectedPrice = '';
    $dump = '';
    $defaultArray = array();
    foreach ($product->get_default_attributes() as $key => $val) {
        // $dump = $dump . '<pre>' . var_export($key, true) . '</pre>';
        // $dump = $dump . '<pre>' . var_export($val, true) . '</pre>';
        $defaultArray['attribute_' . $key] = $val;
    }
    // $dump = $dump . '<pre>' . var_export($defaultArray, true) . '</pre>';
    if (empty($defaultArray)) {
        $price = $product->get_variation_price( 'min', true ); // nessuna variazione predefinita, mostra il prezzo minimo
    } else {
        foreach ($available_variations as $variation) {
            // $dump = $dump . '<pre>' . var_export($variation['attributes'], true) . '</pre>';
            $isDefVariation = false;
    
            $result = array_diff($defaultArray, $variation['attributes']);
            if (empty($result)) {
                $isDefVariation = true;
                $price = $variation['display_price'];
                break;
            }
        }
    }

    $selectedPrice = wc_price($price);
    // $dump = $dump . '<pre>' . var_export($available_variations, true) . '</pre>';
    return $selectedPrice . $dump;
}
10 apr 2021 13:43:53
Commenti

Quali modifiche hai apportato esattamente e perché? Per favore [modifica] la tua risposta e aggiungi alcune spiegazioni.

fuxia fuxia
11 apr 2021 15:00:31
0

Mostra il prezzo singolo variabile

add_filter( 'woocommerce_show_variation_price', '__return_true' );
22 apr 2019 12:13:05
0

aggiornamento del codice di @vivek poiché il suo codice funziona solo per una singola variazione

    add_filter('woocommerce_variable_price_html', 'custom_variation_price', 10, 2);
function custom_variation_price($price, $product) {
    $available_variations = $product->get_available_variations();
    $selectedPrice = '';
    $dump = '';
    $defaultArray = array();
    foreach ($available_variations as $variation) {
    // $dump = $dump . '<pre>' . var_export($variation['attributes'], true) . '</pre>';
    $isDefVariation = false;
    foreach ($product->get_default_attributes() as $key => $val) {
        // $dump = $dump . '<pre>' . var_export($key, true) . '</pre>';
            // $dump = $dump . '<pre>' . var_export($val, true) . '</pre>';
        $defaultArray['attribute_' . $key] = $val;
    }
    **$result = array_diff($defaultArray, $variation['attributes']);**
    **if (empty($result)) {
        $isDefVariation = true;
        $price = $variation['display_price'];
    }**
    }

    $selectedPrice = wc_price($price);
//  $dump = $dump . '<pre>' . var_export($available_variations, true) . '</pre>';
    return $selectedPrice . $dump;
}

Questo funzionerà per chiavi di variazione multiple

31 lug 2019 21:39:58