function woodmart_product_label() {
global $product;
$output = array();
$product_attributes = woodmart_get_product_attributes_label();
$percentage_label = woodmart_get_opt( 'percentage_label' );
if ( 'small' === woodmart_loop_prop( 'product_hover' ) ) {
return;
}
if ( $product->is_on_sale() ) {
$percentage = '';
$not_percentage = '1';
if ( $product->get_type() == 'variable' && $percentage_label ) {
$available_variations = $product->get_variation_prices();
$max_percentage = 0;
foreach ( $available_variations['regular_price'] as $key => $regular_price ) {
$sale_price = $available_variations['sale_price'][ $key ];
if ( $sale_price < $regular_price ) {
if ( $not_percentage == '1' ) {
$percentage = $regular_price - $sale_price;
} else {
$percentage = round( ( ( (float) $regular_price - (float) $sale_price ) / (float) $regular_price ) * 100 );
}
if ( $percentage > $max_percentage ) {
$max_percentage = $percentage;
}
}
}
$percentage = $max_percentage;
} elseif ( ( $product->get_type() == 'simple' || $product->get_type() == 'external' || $product->get_type() == 'variation' ) && $percentage_label ) {
if ( $not_percentage == '1' ) {
$percentage = $product->get_regular_price() - $product->get_sale_price();
} else {
$percentage = round( ( ( (float) $product->get_regular_price() - (float) $product->get_sale_price() ) / (float) $product->get_regular_price() ) * 100 );
}
}
if ( $percentage ) {
if ( $not_percentage == '1' ) {
$output[] = '<span class="onsale product-label">-' . $percentage . ' ₽</span>';
} else {
$output[] = '<span class="onsale product-label">' . sprintf( _x( '-%d%%', 'sale percentage', 'woodmart' ), $percentage ) . '</span>';
}
} else {
$output[] = '<span class="onsale product-label">' . esc_html__( 'Sale', 'woodmart' ) . '</span>';
}
}
if ( ! $product->is_in_stock() && 'thumbnail' === woodmart_get_opt( 'stock_status_position', 'thumbnail' ) ) {
$output[] = '<span class="out-of-stock product-label">' . esc_html__( 'Sold out', 'woodmart' ) . '</span>';
}
if ( $product->is_featured() && woodmart_get_opt( 'hot_label' ) ) {
$output[] = '<span class="featured product-label">' . esc_html__( 'Hot', 'woodmart' ) . '</span>';
}
if ( woodmart_get_opt( 'new_label' ) && woodmart_is_new_label_needed( get_the_ID() ) ) {
$output[] = '<span class="new product-label">' . esc_html__( 'New', 'woodmart' ) . '</span>';
}
if ( $product_attributes ) {
foreach ( $product_attributes as $attribute ) {
$output[] = $attribute;
}
}
$output = apply_filters( 'woodmart_product_label_output', $output );
if ( $output ) {
woodmart_enqueue_inline_style( 'woo-mod-product-labels' );
$shape = woodmart_get_opt( 'label_shape' );
if ( 'rectangular' === $shape ) {
woodmart_enqueue_inline_style( 'woo-mod-product-labels-rect' );
}
if ( 'rounded' === $shape ) {
woodmart_enqueue_inline_style( 'woo-mod-product-labels-round' );
}
echo '<div class="product-labels labels-' . $shape . '">' . implode( '', $output ) . '</div>';
}
}
add_filter( 'woocommerce_sale_flash', 'woodmart_product_label', 10 );
Спасибо за помощь. Но выдает ошибкуКод:function woodmart_product_label() { global $product; $output = array(); $product_attributes = woodmart_get_product_attributes_label(); $percentage_label = woodmart_get_opt( 'percentage_label' ); if ( 'small' === woodmart_loop_prop( 'product_hover' ) ) { return; } if ( $product->is_on_sale() ) { $percentage = ''; $not_percentage = '1'; if ( $product->get_type() == 'variable' && $percentage_label ) { $available_variations = $product->get_variation_prices(); $max_percentage = 0; foreach ( $available_variations['regular_price'] as $key => $regular_price ) { $sale_price = $available_variations['sale_price'][ $key ]; if ( $sale_price < $regular_price ) { if ( $not_percentage == '1' ) { $percentage = $regular_price - $sale_price; } else { $percentage = round( ( ( (float) $regular_price - (float) $sale_price ) / (float) $regular_price ) * 100 ); } if ( $percentage > $max_percentage ) { $max_percentage = $percentage; } } } $percentage = $max_percentage; } elseif ( ( $product->get_type() == 'simple' || $product->get_type() == 'external' || $product->get_type() == 'variation' ) && $percentage_label ) { if ( $not_percentage == '1' ) { $percentage = $product->get_regular_price() - $product->get_sale_price(); } else { $percentage = round( ( ( (float) $product->get_regular_price() - (float) $product->get_sale_price() ) / (float) $product->get_regular_price() ) * 100 ); } } if ( $percentage ) { if ( $not_percentage == '1' ) { $output[] = '<span class="onsale product-label">-' . $percentage . ' ₽</span>'; } else { $output[] = '<span class="onsale product-label">' . sprintf( _x( '-%d%%', 'sale percentage', 'woodmart' ), $percentage ) . '</span>'; } } else { $output[] = '<span class="onsale product-label">' . esc_html__( 'Sale', 'woodmart' ) . '</span>'; } } if ( ! $product->is_in_stock() && 'thumbnail' === woodmart_get_opt( 'stock_status_position', 'thumbnail' ) ) { $output[] = '<span class="out-of-stock product-label">' . esc_html__( 'Sold out', 'woodmart' ) . '</span>'; } if ( $product->is_featured() && woodmart_get_opt( 'hot_label' ) ) { $output[] = '<span class="featured product-label">' . esc_html__( 'Hot', 'woodmart' ) . '</span>'; } if ( woodmart_get_opt( 'new_label' ) && woodmart_is_new_label_needed( get_the_ID() ) ) { $output[] = '<span class="new product-label">' . esc_html__( 'New', 'woodmart' ) . '</span>'; } if ( $product_attributes ) { foreach ( $product_attributes as $attribute ) { $output[] = $attribute; } } $output = apply_filters( 'woodmart_product_label_output', $output ); if ( $output ) { woodmart_enqueue_inline_style( 'woo-mod-product-labels' ); $shape = woodmart_get_opt( 'label_shape' ); if ( 'rectangular' === $shape ) { woodmart_enqueue_inline_style( 'woo-mod-product-labels-rect' ); } if ( 'rounded' === $shape ) { woodmart_enqueue_inline_style( 'woo-mod-product-labels-round' ); } echo '<div class="product-labels labels-' . $shape . '">' . implode( '', $output ) . '</div>'; } } add_filter( 'woocommerce_sale_flash', 'woodmart_product_label', 10 );
Попробуйте добавить в functions.php - правда это костыль
Здравствуйте, вставил в файл functions.php дочерней темы, до этого вставлял в плагин Code Snippets В результате появилась скидка но она неправильная и не изменяется в зависимости от вариации товара. Вот моя страница https://cv87810.tmweb.ru/katalog/pi...ity/dub/mebelnyj-shhit-rustikalnyj-s-suchkom/А код добавляете в functions.php дочерней темы?
Для вариативных товаров так и есть. Вычисляется максимальная скидка из всех возможных и отображается типа "Скидки до 10000 руб"Здравствуйте, вставил в файл functions.php дочерней темы, до этого вставлял в плагин Code Snippets В результате появилась скидка но она неправильная и не изменяется в зависимости от вариации товара. Вот моя страница https://cv87810.tmweb.ru/katalog/pi...ity/dub/mebelnyj-shhit-rustikalnyj-s-suchkom/
add_action('wp_footer', 'din_sale_price',100);
function din_sale_price() {
?>
<script type="text/javascript">
(function($) {
$(document).on('found_variation.first', function(event, variation){
thisvar=event.target;
$sale_price=variation.display_price;
$orig_price=variation.display_regular_price;
$discount=$orig_price-$sale_price;
if( thisvar && $discount > 0){
ptarget = thisvar.closest('li.product') ? thisvar.closest('li.product') : thisvar.closest('div.sale');
$splash= $(ptarget).find('span.onsale');
$splash.text("Скидка " + $discount +" руб.");
}
});
})(jQuery, window, document)
</script>
<?php
}
Получилось! Спасибо огромное вам!Для вариативных товаров так и есть. Вычисляется максимальная скидка из всех возможных и отображается типа "Скидки до 10000 руб"
Может , конечно есть где в сети решение. Как мне видится тут кроме кода (вроде того, что выше) надо еще jQuery код городить.
Не большой знаток JS/JQuery, но попробуйте в functions.php добавить.
Код:add_action('wp_footer', 'din_sale_price',100); function din_sale_price() { ?> <script type="text/javascript"> (function($) { $(document).on('found_variation.first', function(event, variation){ thisvar=event.target; $sale_price=variation.display_price; $orig_price=variation.display_regular_price; $discount=$orig_price-$sale_price; if( thisvar && $discount > 0){ ptarget = thisvar.closest('li.product') ? thisvar.closest('li.product') : thisvar.closest('div.sale'); $splash= $(ptarget).find('span.onsale'); $splash.text("Скидка " + $discount +" руб."); } }); })(jQuery, window, document) </script> <?php }