wordpress - 如何获得woocommerce价格属性

标签 wordpress woocommerce

我试图在 woocommerce 单个产品页面上获取以下信息,以替换 woocommerce 的默认价格样式。

当 Item 打折时,我希望能够获得原价和折扣价,并在一次潜水中回响以进一步造型。我正在努力实现这样的目标。

<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>

我在正确的地方吗?任何人都知道如何访问这些属性?

谢谢

最佳答案

显示价格的主要功能是 get_price_html()/woocommerce/includes/abstracts/abstract-wc-product.php文件,并且有一些过滤器允许用户自定义价格的 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/ 中文件夹。

    关于wordpress - 如何获得woocommerce价格属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23271593/

    相关文章:

    php - CSS 选择器 - 有些东西不起作用

    wordpress - 我在 woocommerce 中遇到此错误 "Gateway Disabled: PayPal does not support your store currency"

    javascript - 如何为 Smooch(网络信使)设置点击聊天链接?

    html - 为什么在添加文本时 HTML 页面的布局会发生变化

    html - 将搜索框添加到下拉 Wordpress

    php - 将 WooCommerce 城市字段更改为前端和管理中的下拉列表

    php - 显示 WooCommerce 可变产品选项

    php - Woocommerce 中定义的产品类别中仅允许购物车中的一件商品

    javascript - 语法错误: <a> link not working by clicking,只能通过右键+ "open link in new tab"命令打开

    javascript - 单击链接到页面上某个部分的菜单项时,如何隐藏汉堡包菜单?