WooCommerce:如何编辑get_price_html


13

我正在尝试编辑单个产品的价格。

single-product/price.php其中有一个模板调用$product->get_price_html。如何编辑该功能/方法以更改HTML的显示方式?

此刻即使我删除了位于该功能中的所有内容,class-wc-product仍能奇迹般地显示吗?有人知道为什么吗?

Answers:


17

绝对不要直接编辑核心文件和插件文件,因为任何更新都可能会覆盖您的更改。如果您在WooCommerce源代码中查找该get_price_html方法,则可以使用许多过滤器来修改函数的输出。

有关add_filterapply_filters呼叫中添加过滤器的更多信息,请参见Codex 。

get_price_htmlclass-wc-product

return apply_filters('woocommerce_get_price_html', $price, $this);

因此,添加您自己的过滤器:

add_filter( 'woocommerce_get_price_html', 'wpa83367_price_html', 100, 2 );
function wpa83367_price_html( $price, $product ){
    return 'Was:' . str_replace( '<ins>', ' Now:<ins>', $price );
}

谢谢您的回答,顺便说一句,为什么当我删除main函数的内容时,它仍会正常返回输出
Lucky Luke

1
因此,可以说如果有一笔交易将其退还给我<del>£2</del><ins>£1</ins>,我该如何Was:<del>£2</del> Now:<ins>£1</ins>使用过滤器将其更改为?
卢克·卢克

不确定,不太熟悉WooCommerce,也许另一个类可以扩展它。请参阅上方的第二个问题。
米洛

布里尔(Brill);),大力帮助
幸运卢克

我想知道默认woocommerce_get_price_html过滤器中发生了什么$price。在我的网站上,woocommerce显示免费产品改为$ 0Free!
SKMohammadi

5
function wpa83368_price_html( $price,$product ){
   // return $product->price;
    if ( $product->price > 0 ) {
      if ( $product->price && isset( $product->regular_price ) ) {
        $from = $product->regular_price;
        $to = $product->price;
        return '<div class="old-colt"><del>'. ( ( is_numeric( $from ) ) ? woocommerce_price( $from ) : $from ) .' Retail </del>  | </div><div class="live-colst">'.( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) .'Our Price</div>';
      } else {
        $to = $product->price;
        return '<div class="live-colst">' . ( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) . 'Our Price</div>';
      }
   } else {
     return '<div class="live-colst">0 Our Price</div>';
   }
}

5
即使您的代码可以正常工作(我也没有理由认为这不可行),这是一个Q / A站点,而不是代码存储库,因此最好共享专业知识和知识来解释您的代码,而不是只编写没有解释的代码也没有内联评论...
gmazzap

该代码还使用了不好的对象属性。
Svetoslav Marinov
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.