我试图在woocommerce单一产品页面上获取以下信息,以取代woocommerce的默认价格风格。
当物品在售时,我希望能够获得原价和折扣价,并在潜水中回应它以进一步造型。我想尝试这样的事情。
<div id="orig-price">Original Price: <?php echo $price; ?></div>
<div id="sale-price">Sale Price: <?php echo $sale-price; ?></div>
<div id="saved">You saved: <?php $saved=$price-$saleprice; echo $saved; ?></div>
我试过打开price.php,但没找到我要找的东西。这就是我得到的。
<div itemprop="offers" itemscope itemtype="http://schema.org/Offer">
<p class="price"><?php echo $product->get_price_html(); ?></p>
<meta itemprop="price" content="<?php echo $product->get_price(); ?>" />
<meta itemprop="priceCurrency" content="<?php echo get_woocommerce_currency(); ?>" />
<link itemprop="availability" href="http://schema.org/<?php echo $product->is_in_stock() ? 'InStock' : 'OutOfStock'; ?>" />
<div><?php echo $sale_price_in_percent; ?></div>
</div>
我在正确的地方吗?任何人都知道如何访问这些属性?
由于
答案 0 :(得分:9)
在get_price_html()
文件中显示价格的主要功能为/woocommerce/includes/abstracts/abstract-wc-product.php
,并且有一些过滤器允许用户自定义价格的html:
此功能执行完整的工作以显示价格,包括税金和销售计算,并且由于您完全重写html,下面的示例使用最后一个过滤器woocommerce_get_price_html。它从原始HTML中提取价格并将其插入到新的HTML结构中。
add_filter( 'woocommerce_get_price_html', function( $price, $product )
{
global $woocommerce_loop;
// check if we are in single product page, in main section, and if product has price and is on sale
if ( is_product() && !isset( $woocommerce_loop ) && $product->get_price() && $product->is_on_sale() ) {
// collect prices from $price html string
$prices = array_map( function( $item ) {
return array( $item, (float) preg_replace( "/[^0-9.]/", "", html_entity_decode( $item, ENT_QUOTES, 'UTF-8' ) ) );
}, explode( ' ', strip_tags( $price ) ) );
$price = isset( $prices[0][0] ) ? '<span class="orig-price">Original Price: ' . $prices[0][0] . '</span>' : '';
$price .= isset( $prices[1][0] ) ? '<span class="sale-price">Sale Price: ' . $prices[1][0] . '</span>' : '';
if ( $product->get_regular_price() ) {
// set saved amount with currency symbol placed as defined in options
$price .= '<span class="saved">You saved: ' . sprintf( get_woocommerce_price_format(), get_woocommerce_currency_symbol(), $prices[0][1] - $prices[1][1] ) . '</span>';
}
}
return $price;
}, 10, 2 );
我在这里使用span标签而不是问题中使用的div,因为输出仍然包含在段落中。要进一步自定义,请将price.php模板放在/themes/yourtheme/woocommerce/single-product/
文件夹中。
答案 1 :(得分:1)
这可以通过覆盖woocommerce模板来实现。创建一个新的PHP文件,在该文件中写入div结构。
现在请参阅How to override template in WooCommerce
上的这篇文章希望这会让你朝着正确的方向前进