Afișarea prețului de vânzare înaintea prețului obișnuit (WooCommerce)

1 ian. 2017, 22:17:49
Vizualizări: 24.3K
Voturi: -1

Aș dori să afișez prețul de vânzare al unui produs înaintea prețului obișnuit (cel redus). Știu că acest lucru are legătură cu get_price_html. În mod implicit, acesta generează ceva de genul:

<del>preț obișnuit</del>
<ins>preț de vânzare</ins>

Vreau să modific rezultatul astfel încât să arate așa (practic, cele două prețuri sunt afișate într-o ordine diferită):

<ins>preț de vânzare</ins>
<del>preț obișnuit</del>

Cum pot face acest lucru?

Mulțumesc!

0
Toate răspunsurile la întrebare 3
0

Trebuie să modifici acest cod în fișierul functions.php

if (!function_exists('my_commonPriceHtml')) {

function my_commonPriceHtml($price_amt, $regular_price, $sale_price) {
    $html_price = '<p class="price">';
    //dacă produsul este la reducere
    if (($price_amt == $sale_price) && ($sale_price != 0)) {
        $html_price .= '<ins>' . wc_price($sale_price) . '</ins>';
        $html_price .= '&nbsp;&nbsp;<del>' . wc_price($regular_price) . '</del>';
    }
    //la reducere dar gratuit
    else if (($price_amt == $sale_price) && ($sale_price == 0)) {
        $html_price .= '<ins>Gratis!</ins>';
        $html_price .= '<del>' . wc_price($regular_price) . '</del>';
    }
    //nu este la reducere
    else if (($price_amt == $regular_price) && ($regular_price != 0)) {
        $html_price .= '<ins>' . wc_price($regular_price) . '</ins>';
    }
    //pentru produs gratuit
    else if (($price_amt == $regular_price) && ($regular_price == 0)) {
        $html_price .= '<ins>Gratis!</ins>';
    }
    $html_price .= '</p>';
    return $html_price;
}

}

add_filter('woocommerce_get_price_html', 'my_simple_product_price_html', 100, 2);

function my_simple_product_price_html($price, $product) {
if ($product->is_type('simple')) {
    $regular_price = $product->regular_price;
    $sale_price = $product->sale_price;
    $price_amt = $product->price;
    return my_commonPriceHtml($price_amt, $regular_price, $sale_price);
} else {
    return $price;
}
}

add_filter('woocommerce_variation_sale_price_html', 'my_variable_product_price_html', 10, 2);
add_filter('woocommerce_variation_price_html', 'my_variable_product_price_html', 10, 2);

function my_variable_product_price_html($price, $variation) {
$variation_id = $variation->variation_id;
//crearea obiectului produs
$variable_product = new WC_Product($variation_id);

$regular_price = $variable_product->regular_price;
$sale_price = $variable_product->sale_price;
$price_amt = $variable_product->price;

 return my_commonPriceHtml($price_amt, $regular_price, $sale_price);
 }

add_filter('woocommerce_variable_sale_price_html', 'my_variable_product_minmax_price_html', 10, 2);
add_filter('woocommerce_variable_price_html', 'my_variable_product_minmax_price_html', 10, 2);

function my_variable_product_minmax_price_html($price, $product) {
$variation_min_price = $product->get_variation_price('min', true);
$variation_max_price = $product->get_variation_price('max', true);
$variation_min_regular_price = $product->get_variation_regular_price('min', true);
$variation_max_regular_price = $product->get_variation_regular_price('max', true);

if (($variation_min_price == $variation_min_regular_price) && ($variation_max_price == $variation_max_regular_price)) {
    $html_min_max_price = $price;
} else {
    $html_price = '<p class="price">';
    $html_price .= '<ins>' . wc_price($variation_min_price) . '-' . wc_price($variation_max_price) . '</ins>';
    $html_price .= '<del>' . wc_price($variation_min_regular_price) . '-' . wc_price($variation_max_regular_price) . '</del>';
    $html_min_max_price = $html_price;
}

return $html_min_max_price;
}
19 mai 2017 14:57:42
0

Am încercat eu însumi și acesta este codul meu price.php. Va trebui doar să adăugați niște CSS după nevoile dumneavoastră.

Mai întâi, eliminați codul existent

'<p class="'.esc_attr( apply_filters( 'woocommerce_product_price_class', 'price' ) ).'">'.$product->get_price_html().'</p>';

Apoi introduceți acest cod:

global $product;
$product_id = $product->get_id();

if( $product->is_type( 'simple' ) ){
    $regular_price = $product->get_regular_price();
    $sale_price = $product->get_sale_price();
    $discount = ($sale_price/$regular_price)*100;

echo    '<ul class="'.esc_attr( apply_filters( 'woocommerce_product_price_class', 'price')).'">
            <li class="sale_price"><span class="woocommerce-Price-currencySymbol">'.get_woocommerce_currency_symbol().'</span>'.$sale_price.'</li>
            <li class="regular_price"><span class="woocommerce-Price-currencySymbol">'.get_woocommerce_currency_symbol().'</span>'.$regular_price.'</li>
            <li class="disc">'.round($discount,0).'% Reducere</li>
            <div class="clear"></div>
        </ul>';
} elseif( $product->is_type( 'variable' ) ){
    // Prețul standard minim și maxim
    $min_regular_price = $product->get_variation_regular_price( 'min' );
    $max_regular_price = $product->get_variation_regular_price( 'max' );

    // Prețul redus minim și maxim
    $min_sale_price = $product->get_variation_sale_price( 'min' );
    $max_sale_price = $product->get_variation_sale_price( 'max' );

    // Prețul activ minim și maxim
    $min_price = $product->get_variation_price( 'min' );
    $max_price = $product->get_variation_price( 'max' );
    $var_discount = ($min_sale_price/$min_regular_price)*100;

echo    '<ul class="'.esc_attr( apply_filters( 'woocommerce_product_price_class', 'price')).'">
            <li class="sale_price"><span class="woocommerce-Price-currencySymbol">'.get_woocommerce_currency_symbol().'</span>'.$min_sale_price.'</li>
            <li class="regular_price"><span class="woocommerce-Price-currencySymbol">'.get_woocommerce_currency_symbol().'</span>'.$max_regular_price.'</li>
            <li class="disc">'.round($var_discount,0).'% Reducere</li>
            <div class="clear"></div>
        </ul>';
    }

Rezultatul este: Previzualizare prețuri WooCommerce cu reducere

5 iun. 2022 09:21:59
0

Prețul provine din fișierul price.php din plugin-ul WooCommerce. În interiorul acestui fișier există o funcție precum

$price_html = $product->get_price_html();

Trebuie să comentați această linie și să înlocuiți funcția cu următorul cod.

// Preț de vânzare
<span class="price"><?php echo "Preț promoțional:". " " . get_woocommerce_currency_symbol().$product->get_sale_price(); ?></span>
// Preț standard
<span class="price"><?php echo "Preț standard:". " " . get_woocommerce_currency_symbol().$product->get_regular_price(); ?></span> 

și adăugați clasele conform cerințelor dumneavoastră.

17 mai 2017 14:27:06