Как отобразить цену товара в цикле WooCommerce

25 янв. 2016 г., 23:49:55
Просмотры: 54.2K
Голосов: 5

Мой общий вопрос: как отобразить цену товара в WooCommerce для продукта в цикле, а не цену того товара, на странице которого мы находимся? Другими словами, я хочу отобразить несколько связанных товаров в сетке на странице отдельного товара, но когда я использую этот код:

<?php 
   $product = new WC_Product(get_the_ID()); 
   echo wc_price($product->get_price_including_tax(1,$product->get_price()));
?>

он отображает цену основного товара на странице для каждого отдельного товара в моей сетке - цену того товара, на странице которого мы находимся, а не цену каждого товара в сетке, если это понятно... То есть, если цена товара на отдельной странице составляет £9.00, каждый товар в сетке связанных товаров будет отображаться с ценой £9.00, вместо своей собственной цены...

Я использую поле отношений ACF для выбора товаров на странице.

Вот весь мой код, включая поле отношений ACF:

<?php 
$posts = get_field('related_set_1');
if( $posts ): ?>
<?php foreach( $posts as $p): ?>
<li>
    <a href="<?php echo get_permalink( $p->ID ); ?>">
        <?php 
          echo get_the_post_thumbnail( $p->ID, '175x100' )
                ?>
            <div style="overflow:hidden">
                <h4><?php echo $p->post_title; ?></h4>
                <p class="price">
                    <?php 
                    global $post;
                    $product = new WC_Product($post->ID); 
                    echo     wc_price($product->get_price_including_tax(1,$product->get_price()));
                    ?>
                </p>
                <p class="link">Посмотреть</p>
            </div>
    </a>
</li>
<?php endforeach; ?>
    <?php endif; ?>

И я использую это в functions.php в функции фильтра, если это имеет какое-то значение?

add_filter( 'woocommerce_after_single_product_summary', 'custom_related_products' );
function custom_related_products() { ?>
.... (код выше здесь)
<php? }

Поскольку я отображаю это на странице другого товара, мне пришлось использовать

get_the_post_thumbnail( $p->ID, '175x100' )

вместо

the_thumbnail

так как иначе у меня была та же проблема, и теперь все работает хорошо, кроме цены.

Есть ли способ получить цену по ID или чему-то еще?

0
Все ответы на вопрос 3
0

Я разобрался с этим, $post нужно заменить на $p в:

global $post;
$product = new WC_Product( $post->ID );
1 февр. 2016 г. 19:09:15
2

Пример

<?php
global $woocommerce;
// Получаем символ валюты
$currency = get_woocommerce_currency_symbol();
// Получаем обычную цену товара
$price = get_post_meta( get_the_ID(), '_regular_price', true);
// Получаем цену со скидкой
$sale = get_post_meta( get_the_ID(), '_sale_price', true);
?>

<?php if($sale) : ?>
<p class="product-price-tickr"><del><?php echo $currency; echo $price; ?></del> <?php echo $currency; echo $sale; ?></p>    
<?php elseif($price) : ?>
<p class="product-price-tickr"><?php echo $currency; echo $price; ?></p>    
<?php endif; ?>

взято из https://gist.github.com/aarifhsn/d0535a720d13369010ce

18 апр. 2018 г. 20:32:50
Комментарии

Это не будет работать, если цена вашего товара задается на уровне вариации — например, у вариативных товаров цена указана не в метаданных, а в вариациях.

FooBar FooBar
21 апр. 2020 г. 17:08:48

@FooBar тогда как мы можем получить цену вариативного товара?

mjcoder mjcoder
20 мая 2020 г. 14:35:46
0
global $post;
$product = new WC_Product( $post->ID );
echo $product->get_price_html();

Этот код вернет правильную цену для простых и вариативных товаров, а также должен возвращать текущие активные цены (обычную / акционную).

Редактирование: ссылка - https://woocommerce.github.io/code-reference/classes/WC-Product.html#method_get_price_html

8 апр. 2021 г. 18:14:11