Как получить число (стоимость) за минусом скидки в произвольных полях вордпреса?

Ссылка скопирована
1 ответ

Всех с днем России, друзья!
Итак, вордпресс, плагин Advanced Custom Fields
Есть 2 доп. поля - Стоимость и Скидка
В стоимости - число
В скидки - число с процентом (напрмиер - 15%)

Я пытаюсь из этих данных получить стоимость с учетом указанной скидки:

<p>Стоимость : <?php echo esc_html( get_field('prices') ); ?> руб.</p>             <p>Скидка: <?php echo esc_html( get_field('skidka') ); ?></p>             <p>Итоговая цена: <b>КАК ЕЕ ВЫВЕСТИ ТУТ?</b></p>

<p>Стоимость : <?php echo esc_html( get_field('prices') ); ?> руб.</p> <p>Скидка: <?php echo esc_html( get_field('skidka') ); ?></p> <p>Итоговая цена: <b>КАК ЕЕ ВЫВЕСТИ ТУТ?</b></p>

Заранее спасибо!

Дополнительно:

tukreb @tukreb Просто возьмите и выведите.
И делаете что-то такое, конечно итоговую цену вы должны вычесть сами

<p>Итоговая цена: <b><?php echo get_field('prices') -  get_field('skidka'); ?></b></p>

<p>Итоговая цена: <b><?php echo get_field('prices') - get_field('skidka'); ?></b></p>

  • Высчитывает только число, а не процент

    Как получить число (стоимость) за минусом скидки в произвольных полях вордпреса?

  • Руслан Макаров, ну так я вам так и написал, что вы сами должны формулу составить.
    Если вам ответ помог, вы должны помечать это решением, а не выдвигать тоже самое но под вашим именем. Иначе вам болье никто помогать не будет.
  • tukreb, я вас поблагодарил в своем сообщении.
    А решением не отметил так как это подсказка, и за нее спасибо, но не решение.
  • tukreb, я отметил ваше сообщение решением, но теперь смотрите как получается, правильный ответ, код, решение - ниже вашего совета с кодом хоть и правильным, но не совсем решающий проблему.
  • Руслан Макаров, вы не понимаете как работает сайт. Тут не делают чужую работу, т.к этот не фриланс. Здесь дают только подсказку в решение ваших проблем.

Как получить число (стоимость) за минусом скидки в произвольных полях вордпреса?

Руслан Макаров @facepook Автор вопроса С детства болею неизлечимым сео-даром! Спасибо tukreb за подсказку
Дальше допилил сам (не зная кода php)

<p>Итоговая цена: <b><?php echo get_field('prices') - (get_field('prices') * (get_field('skidka') / 100)); ?></b></p>

<p>Итоговая цена: <b><?php echo get_field('prices') - (get_field('prices') * (get_field('skidka') / 100)); ?></b></p>

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Mobile-редакция Ответ

Если в ACF поле prices содержит цену, а skidka содержит процент вроде 15%, сначала нужно привести оба значения к числам, потом посчитать скидку. Простое вычитание price - discount неверно, потому что скидка указана в процентах, а не в рублях.

$price = (float) get_field('prices');
$discount_raw = (string) get_field('skidka');
$discount = (float) str_replace(['%', ','], ['', '.'], $discount_raw);
 
$final_price = $price;
 
if ($discount > 0) {
    $final_price = $price - ($price * $discount / 100);
}
 
$final_price = max(0, $final_price);

$price = (float) get_field('prices'); $discount_raw = (string) get_field('skidka'); $discount = (float) str_replace(['%', ','], ['', '.'], $discount_raw); $final_price = $price; if ($discount > 0) { $final_price = $price - ($price * $discount / 100); } $final_price = max(0, $final_price);

Вывод:

<p>Стоимость: <?php echo esc_html(number_format($price, 0, '.', ' ')); ?> руб.</p>
<p>Скидка: <?php echo esc_html($discount); ?>%</p>
<p>Итоговая цена: <b><?php echo esc_html(number_format($final_price, 0, '.', ' ')); ?> руб.</b></p>

<p>Стоимость: <?php echo esc_html(number_format($price, 0, '.', ' ')); ?> руб.</p> <p>Скидка: <?php echo esc_html($discount); ?>%</p> <p>Итоговая цена: <b><?php echo esc_html(number_format($final_price, 0, '.', ' ')); ?> руб.</b></p>

Лучше хранить скидку в ACF как число без символа %, а знак процента добавлять только при выводе. Тогда меньше риска получить неправильный расчёт из-за пробелов, запятых или текста в поле.

Если поле скидки иногда пустое, содержит пробелы или значение вроде 15 %, лучше сразу нормализовать его. Тогда расчёт не сломается при ручном вводе в админке:

$price = preg_replace('/[^0-9.,]/', '', (string) get_field('prices'));
$discount = preg_replace('/[^0-9.,]/', '', (string) get_field('skidka'));
 
$price = (float) str_replace(',', '.', $price);
$discount = (float) str_replace(',', '.', $discount);
 
$final_price = $price * (1 - $discount / 100);

$price = preg_replace('/[^0-9.,]/', '', (string) get_field('prices')); $discount = preg_replace('/[^0-9.,]/', '', (string) get_field('skidka')); $price = (float) str_replace(',', '.', $price); $discount = (float) str_replace(',', '.', $discount); $final_price = $price * (1 - $discount / 100);

Для вывода на сайте не показывайте «сырой» результат с дробями, если цена в рублях должна быть целым числом. Используйте round() или number_format(). Например, при цене 10000 и скидке 15 итог будет 8500, а не 9985. Главное правило: в базе храните числа, а символы руб. и % добавляйте только в шаблоне.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно