Как получить число (стоимость) за минусом скидки в произвольных полях вордпреса?
Всех с днем России, друзья!
Итак, вордпресс, плагин 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>
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


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