Woocommerce php代码get_price_html()

时间:2013-10-13 14:01:41

标签: php wordpress woocommerce

我是WordPress和WooCommerce的新手,我相信我已经确定了产生我想要改变的输出的代码行。

我使用的是来自WooCommerce的免费artificer主题,而index.php有一行:

<h3>
    <?php the_title(); ?>
    <span class="price">
        <?php echo $_product->get_price_html(); ?>
    </span>
</h3>

这会产生类似“黑石 - $ 43”的东西(即产品名称 - 价格

我想要一些像“黑石¥43”的东西 (即产品标题<br/>价格

看起来``get_price_html()`函数有一些过滤器,但文档不是很好,或者我只是不明白如何浏览它。

任何方向都会受到赞赏 感谢。

3 个答案:

答案 0 :(得分:11)

所有$product->get_price_html(); 产生这样的东西:

<del><span class="amount">£8.00</span>–<span class="amount">£9.00</span></del>
<ins><span class="amount">£7.00</span>–<span class="amount">£8.00</span></ins>

要操纵此数据,您必须从此字符串

中提取它

如果您使用WP过滤器 - 您将在任何地方更改get_price_html()输出,如果您需要在一个地方更改get_price_html()输出,则应该执行下一步:

global $product;

$price_html = $product->get_price_html();

$price_html_array = price_array($price_html);

function price_array($price){
    $del = array('<span class="amount">', '</span>','<del>','<ins>');
    $price = str_replace($del, '', $price);
    $price = str_replace('</del>', '|', $price);
    $price = str_replace('</ins>', '|', $price);
    $price_arr = explode('|', $price);
    $price_arr = array_filter($price_arr);
    return $price_arr;
}

现在你在数组中有相同的数据

Array ( [0] => £8.00–£9.00 [1] => £7.00–£8.00 )

你可以随心所欲地做任何事情

要应用全局过滤器,您必须添加

add_filter( 'woocommerce_get_price_html', 'price_array', 100, 2 );

答案 1 :(得分:3)

这可能是您正在寻找的过滤器:

add_filter('woocommerce_variable_price_html', 'custom_variation_price', 10, 2);
function custom_variation_price( $price, $product ) {
    $price = '';
    $price .= woocommerce_price($product->min_variation_price);
    return $price;
}

这只是改变它,以便显示最低价格(而不是其他),因为它不清楚你想如何格式化/设计它。您可以通过$ product对象访问各种其他详细信息以自定义输出。在functions.php文件中使用它。

答案 2 :(得分:1)

您可以通过修改上述行并在主题custom.css文件中添加一个小的css代码来实现此目的。

用这个替换给定的代码:

<h3>
    <?php the_title(); ?>
    <br/>
    <span class="price">
        <?php echo $_product->get_price_html(); ?>
    </span>
</h3>

并在custom.css(推荐)文件或主题style.css文件的最后一行添加以下css代码。

ul.featured-products li h3 .price::before{
    content : '' !important;
}

请注意:以上代码经过测试,并且在Artificer 1.3.16版(2016年5月5日发布)中正常运行。

希望这有帮助!