Woocommerce: afișarea prețului variației implicite în lista de produse?

30 oct. 2017, 11:41:14
Vizualizări: 24.2K
Voturi: 3

Există vreo modalitate de a forța afișarea prețului Variației de Produs pe care am setat-o ca implicită în setările paginii produsului, în loc de prețurile minime și maxime?

Am acest cod pentru a afișa doar un singur preț, dar prețul afișat nu este prețul variației implicite:

/*******************************
    AFIȘEAZĂ DOAR UN SINGUR PREȚ PENTRU VARIAȚII 
*********************************/

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;
}

exemplu afișare preț variație implicită WooCommerce

2
Comentarii

Nu este, deoarece în acea funcție în loc de variația implicită, se afișează prețul cel mai mic/cu reducere. Deși este un duplicat al acestuia: https://stackoverflow.com/questions/36453795/obtaining-default-variation-price-on-a-variation-product-woocommerce Am testat acest lucru și funcționează. Bănuiesc că op a folosit acest lucru ca punct de plecare (aceeași denumire a funcției și variabile transmise), dar nu sunt sigur de ce nu a fost suficient.

galingong galingong
2 nov. 2017 13:55:37
Toate răspunsurile la întrebare 5
1

Încearcă acest cod:

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
Comentarii

Mulțumesc pentru codul tău, dar cred că acesta funcționează doar pentru o singură variație. Am actualizat codul și l-am adăugat în postarea de mai jos

Abhinav bhardwaj Abhinav bhardwaj
31 iul. 2019 21:41:16
0

Aceasta este soluția pentru afișarea prețului minim ca valoare implicită pentru produsele variabile:

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

function shop_variable_product_price( $price, $product ){
    $variation_min_reg_price = $product->get_variation_regular_price('min', true);

    if(!empty($variation_min_reg_price)) {
        $price = woocommerce_price( $variation_min_reg_price );
    }
    else {
        $price = woocommerce_price( $product->regular_price );
    }

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

Actualizarea codului lui @Abhinav pentru a afișa prețul minim în cazul în care nu este setată o variantă implicită:

/**
 * Afișează prețul variantei implicite
 * Dacă nu există variantă implicită, afișează prețul minim
 */

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 ); // nu există variantă implicită, afișează prețul minim
    } 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
Comentarii

Ce modificări ați făcut exact și de ce? Vă rugăm să [editați] răspunsul dumneavoastră și să adăugați câteva explicații.

fuxia fuxia
11 apr. 2021 15:00:31
0

Afișează prețul variabil individual

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

actualizând codul lui @vivek deoarece codul său funcționează doar pentru o singură variație

    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;
}

Acest cod va funcționa pentru mai multe chei de variație

31 iul. 2019 21:39:58