Выводим цену товара в WooCommerce в произвольном месте
15 октября 2017
Выводим базовую цену товара в WooCommerce:
<?php $product_id = get_the_ID(); $product = wc_get_product( $product_id ); echo $product->get_sale_price(); ?>
Выводим цену со скидкой, а если она не менялась, тогда выводим основную цену:
<?php
$price = get_post_meta( get_the_ID(), '_regular_price', true);
$sale = get_post_meta( get_the_ID(), '_price', true);
if (!empty($sale)){
echo $sale;
} else {
echo $price;
}
?>
Выводим общую стоимость товара при изменении количества
Такой вот получился код для Total Price в WooCommerce:
<div class="total-price">
<span class="total-title">Total Price</span>
<span class="total-symbol">$</span><span class="total-amount"><?php
$price = get_post_meta( get_the_ID(), '_regular_price', true);
$sale = get_post_meta( get_the_ID(), '_price', true);
if (!empty($sale)){
echo $sale;
} else {
echo $price;
}
?></span>
<span class="current-price hidden"><?php
if (!empty($sale)){
echo $sale;
} else {
echo $price;
}
?></span>
</div>
И такой JS обрабатывает и выводит сумму:
(function quantityProducts() {
$(".quantity").find("span").click(function () {
var calc = $(this).parent().find(".qty");
var calcText = calc.val();
var price = $('.total-price .current-price');
var priceText = price.text();
var totalAmount = $('.total-price .total-amount');
if ($(this).hasClass("minus") && calcText > 1) {
calc.val(+calcText - 1);
var n = +priceText * (+calcText - 1);
var n = Math.round(n * 100) / 100;
totalAmount.text( n );
}
else if ($(this).hasClass("plus")) {
calc.val(+calcText + 1);
var n = +priceText * (+calcText + 1);
var n = Math.round(n * 100) / 100;
totalAmount.text( n );
}
});
})();
Выглядит это так:

Получаем ссылку на запись или страницу в любой языковой версии (Polylang)
В некоторых шаблонах иногда приходится выводить статические ссылки в коде, лучше, конечно, это делать через…
Получаем описание и заголовок из плагина AIOS и используем его для og-метатегов
На одном из проектов требовалось вывести Open Graph Title и Open Graph Description, что это…
Как изменить изображение флага в переключателе плагина polylang
Как изменить изображение флага в переключателе плагина polylang? Например, вы хотите вставить в переключатель языков…
Как удалить круглые скобки вокруг количества постов в виджете «Рубрики»
Есть задача — удалить круглые скобки вокруг количества постов в виджете «Рубрики«. Добавьте этот код…
5 комментариев
Ответить
Чего-то не работает…
Клэ! А для не ведающих но страждущих, можно приквел к каждому коду? Чего куда совать? Я понимаю, что тут все шарят, но все же….
«Выводим цену со скидкой, а если она не менялась, тогда выводим основную цену:»
Чтобы это корректно работало, необходимо указать так:
То есть во второй строчке заменить
'_price'на'_sale_price', иначе функция будет работать не совсем корректно, например, если хочется вывести зачёркнутую регулярную цену, а рядом с ней указать цену распродажи. Вот пример:<?php $price = get_post_meta( get_the_ID(), '_regular_price', true); $sale = get_post_meta( get_the_ID(), '_sale_price', true); if (!empty($sale)){ echo '<strike>' . wc_price( $price ) . '</strike>'; echo wc_price( $sale ); } else { echo wc_price( $price ); } ?>Так же, я использую
echo wc_price, чтобы выводить цену, отформатированную в соответствии с настройками WooCommerce, то есть с наименованием валюты и т.д.Для комментаторов выше – используется всё это внутри Цикла WordPress.
Это располагается на странице магазина, где выводятся товары. В данном случае выведет ссылку на товар с его наименованием, и цену с валютой. Если хочется размещать товары на любой другой странице – используется другой цикл, к примеру,
get_postsс его аргументами, которые позволят вывести посты заданного типа (в нашем случае товары), в любом месте шаблона.Надо протестировать, но есть замечание сразу:
<strike></strike>— не думаю, что нужно выводить эти теги в PHP, потому что перечеркивание можно задать с помощью CSS.<strike></strike>— устарелый тег<s></s>— тег для перечеркиванияtext-decoration: line-through;— можно с помощью CSS указать стиль перечеркнутого текста для любого элемента.Как видите, мы просто вывели произвольное поле _price с помощью get_post_meta(). WooCommerce использует это поле для базовой цены. Это работает только в случаи, если у вас цена без скидки, но как вывести старую цену и новую с учетом скидки?