Afișarea prețului de vânzare înaintea prețului obișnuit (WooCommerce)
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!

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 .= ' <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;
}

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:

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