Выводим цену товара в WooCommerce в произвольном месте

15.10.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 );
    }
  });

})();

Выглядит это так:
Выводим цену товара в WooCommerce в произвольном месте

Полезная инфа:

Комментарии (5) к “Выводим цену товара в WooCommerce в произвольном месте”

  • Алекс

    Чего-то не работает…

    Ответить
  • Димас

    Клэ! А для не ведающих но страждущих, можно приквел к каждому коду? Чего куда совать? Я понимаю, что тут все шарят, но все же….

    Ответить
  • turbomen

    “Выводим цену со скидкой, а если она не менялась, тогда выводим основную цену:”

    Чтобы это корректно работало, необходимо указать так:

    $price = get_post_meta( get_the_ID(), '_regular_price', true);
    $sale = get_post_meta( get_the_ID(), '_sale_price', true);
    

    То есть во второй строчке заменить '_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 с его аргументами, которые позволят вывести посты заданного типа (в нашем случае товары), в любом месте шаблона.

    Ответить
    • Denis Creative

      Надо протестировать, но есть замечание сразу:
      <strike></strike> – не думаю, что нужно выводить эти теги в PHP, потому что перечеркивание можно задать с помощью CSS.
      <strike></strike> – устарелый тег
      <s></s> – тег для перечеркивания
      text-decoration: line-through; – можно с помощью CSS указать стиль перечеркнутого текста для любого элемента.

      Ответить
  • Ilasha

    Как видите, мы просто вывели произвольное поле _price с помощью get_post_meta(). WooCommerce использует это поле для базовой цены. Это работает только в случаи, если у вас цена без скидки, но как вывести старую цену и новую с учетом скидки?

    Ответить

Оставить комментарий