【问题标题】:How to get woocommerce price attributes如何获取woocommerce价格属性
【发布时间】:2014-06-09 21:32:12
【问题描述】:

我试图在 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>

我在正确的地方吗?有谁知道我如何访问这些属性?

谢谢

【问题讨论】:

    标签: wordpress woocommerce


    【解决方案1】:

    这可以通过覆盖 woocommerce 模板来实现。创建一个新的 PHP 文件,在该文件中写入您的 div 结构。

    现在在How to override template in WooCommerce上参考这篇文章

    希望这会让你朝着正确的方向前进

    【讨论】:

    • 现在的问题是获取价格,然后是模板覆盖。我浏览了那个文档,它在模板下看到了 price.php,它显示了基本价格。需要获取销售价格、折扣、折扣百分比等。是否有相关文档?
    【解决方案2】:

    显示价格的主要函数是/woocommerce/includes/abstracts/abstract-wc-product.php文件中的get_price_html(),并且有一些过滤器允许用户自定义价格的html:

    • woocommerce_sale_price_html
    • woocommerce_price_html
    • woocommerce_empty_price_html
    • woocommerce_free_sale_price_html
    • woocommerce_free_price_html
    • woocommerce_get_price_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/ 文件夹中。

    【讨论】:

    • 谢谢。除了节省的金额外,这似乎有效。它没有显示。原价和售价都很好。
    • 它根本不显示,或者只是数量,我测试时效果很好,销售金额只显示在销售的产品,而不是价格变化的产品或正常价格的产品, 顺便提一句。我正在使用 WC 2.1.5。
    • 它根本不显示。请参阅link,只有 $200 和 $150 是原价和销售价。我怎样才能让它自己输出。没有连接,所以我可以把它放在适当的地方。谢谢
    • 在 $prices 数组上使用 var_dump 来查看发生了什么,单独输出每个是非常棘手的,您可以使用上面列出的过滤器进行单独的价格格式化,但最后所有内容都将被连接起来。如果您想更深入地探索,请打开 abstract-wc-product.php 文件以查看价格是如何生成的以及哪些功能和操作可用。
    • 这是 vardump 的结果。 array(2) { [0]=&gt; array(2) { [0]=&gt; string(11) "$200.00" [1]=&gt; float(36200) } [1]=&gt; array(2) { [0]=&gt; string(11) "$150.00" [1]=&gt; float(36150) } } 没有保存的值。还有,为什么有 36200 和 36150。不应该只有 200 和 150 吗?为什么浮动价格前面都有36? (原价和售价)
    猜你喜欢
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多