Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Объясните пожалуйста, как работает данный код построчно

Vova Kuzna Знаток (370), на голосовании 3 года назад
Add_action('woocommerce_sale_flash','pancode_echo_sale_percent' );

function pancode_echo_sale_percent( $html ) {
global $product;

$regular_max = 0;
$sale_min = 0;
$discount = 0;
if ( 'variable' === $product->get_type() ) {
$prices = $product->get_variation_prices();
$regular_max = max( $prices['regular_price'] );
$sale_min = min( $prices['sale_price'] );
} else {
$regular_max = $product->get_regular_price();
$sale_min = $product->get_sale_price();
}
if ( ! $regular_max && $product instanceof
WC_Product_Bundle ) {
$bndl_price_data=$product>get_bundle_price_data();
$regular_max=max( $bndl_price_data['regular_prices'
] );
$sale_min = max( $bndl_price_data['prices'] );
}
if ( floatval( $regular_max ) )
{ $discount = round( 100 * ( $regular_max -
$sale_min ) / $regular_max );
}
return '- ' .
esc_html( $discount ) . '%';
}
Голосование за лучший ответ
Александр Гуру (3372) 3 года назад
эх.. ты б попробовал сам разобраться и спрашивал только то что действительно не понятно.. сам бы забил на твой вопрос но скучно, жена с малым на даче) можешь записать себе на везение)
там написано что то типо этого:

Add_action('woocommerce_sale_flash','pancode_echo_sale_percent' );
// на хук вукомерса вешается функция, судя по названию что то со скитками связано.

function pancode_echo_sale_percent( $html ) {
// в функцию передается параметр html, что конкретно передает увидешь в доке этого хука
global $product;
// вызывается глобальный обект продукт
$regular_max = 0;
$sale_min = 0;
$discount = 0;
// задаются начальные значения переменных которые будут использоваться в этой функции.
if ( 'variable' === $product->get_type() ) {
// провепрка типа обекта отданного по $product->get_type(), если переменная выполняется эта часть кода
$prices = $product->get_variation_prices();
// в переменную $prices получается массив прайса
$regular_max = max( $prices['regular_price'] );
// в $regular_max получает максемальное значение из массива $prices['regular_price']
$sale_min = min( $prices['sale_price'] );
// в $sale_min получает минимальное значение из массива $prices['sale_price']
} else {
// // провепрка типа обекта отданного по $product->get_type(), если обьект выполняет эту часть кода
$regular_max = $product->get_regular_price();
// в $regular_max получает максемальное значение из свойства обекта $product->get_regular_price()
$sale_min = $product->get_sale_price();
// в $sale_min получает минимальное значение из из свойства обекта $product->get_sale_price();
}
// по итогу мы имеем в $regular_max - максимальную цену продукта, $sale_min минимальную цену.

if ( ! $regular_max && $product instanceof
WC_Product_Bundle ) {
// если $regular_max пустой и глобальный $product совпадает стем что находится в константе WC_Product_Bundle выполняется эта часть кода
$bndl_price_data=$product>get_bundle_price_data();
// $bndl_price_data получает какие то данные из $product>get_bundle_price_data()
$regular_max=max( $bndl_price_data['regular_prices'] );
// $regular_max в этом if пустой вот и ищут в другом месте максимальны значение из $bndl_price_data['regular_prices']

$sale_min = max( $bndl_price_data['prices'] );
// тоже с минимальным значением цены $sale_min получает из $bndl_price_data['prices']
}
if ( floatval( $regular_max ) )
{
// если прилетело число с плавоющей точкой выполяентся эта часть кода
$discount = round( 100 * ( $regular_max -
$sale_min ) / $regular_max );
// получаем округленное число из 100 * (максимальная цена минус минимальная) деленная на максимальную цену
}
return '- ' .
esc_html( $discount ) . '%';
// из хука отдает скидку - скоолько то там %.. с проверкой на всякие не нужные символы
}
Похожие вопросы