Woocommerce 如何正确地覆盖WoCommerce wc_format_sale_price函数?

Woocommerce 如何正确地覆盖WoCommerce wc_format_sale_price函数?,woocommerce,Woocommerce,我正在努力完成这项任务,我真的需要一些帮助。首先,在有人将此标记为非主题之前,我已经阅读了这里和其他网站的所有问题和答案。不走运 我正在尝试编辑位于wc formatting functions.php中的wc\u format\u sale\u price函数的HTML输出 原代码为: 函数wc\u格式\u售价($regular\u price,$sale\u price){ $price=''。(是数字($常规价格)?wc_价格($常规价格):$常规价格)。“(是数字($sale_价格)?w

我正在努力完成这项任务,我真的需要一些帮助。首先,在有人将此标记为非主题之前,我已经阅读了这里和其他网站的所有问题和答案。不走运

我正在尝试编辑位于wc formatting functions.php中的wc\u format\u sale\u price函数的HTML输出

原代码为:

函数wc\u格式\u售价($regular\u price,$sale\u price){
$price=''。(是数字($常规价格)?wc_价格($常规价格):$常规价格)。“(是数字($sale_价格)?wc_价格($sale_价格):$sale_价格)。”;
返回apply_过滤器('woocommerce_format_sale_price'、$price、$regular_price、$sale_price);
如您所见,价格封装在HTML元素

我尝试过直接修改HTML,效果非常好

函数wc\u格式\u售价($regular\u price,$sale\u price){
$price=''。(是数字($常规价格)?wc_价格($常规价格):$常规价格)。“(是数字($sale_价格)?wc_价格($sale_价格):$sale_价格)。”;
返回apply_过滤器('woocommerce_format_sale_price'、$price、$regular_price、$sale_price);
问题是我不想更改WC核心文件,因为这是一种不好的做法,每次店主更新WC插件时,更改都会被删除。 经过一些研究,我确信这应该使用我的主题的functions.php文件中的过滤器来完成,但是所有关于这个功能的教程和文章都非常混乱。我尝试了其中的一些,结果是空白页、重复的价格和诸如此类的东西


我知道过滤器和操作是Wordpress/Woocommerce主题开发的阿尔法和欧米加,但我试图让它们工作都只是失败。

我实际上找到了解决这个问题的方法。 我做了更多的研究,发现了关于堆栈溢出的答案:调用LoicTheAztec的用户指出woocommerce\u format\u sale\u price钩子接受三个参数。因此,我将$price作为过滤函数的第三个参数,现在它可以工作了

我在主题的functions.php文件中放入的最终解决方案如下所示:

add_filter('woocmerce_format_sale_price','ss_format_sale_price',100,3);
函数ss_格式_销售_价格($price,$regular_价格,$sale_价格){
$output\u ss\u price=''(是数字($regular\u price)?wc\u price($regular\u price):$regular\u price)。''(是数字($sale\u price)?wc\u price($sale\u price):$sale\u price)。'';
返回$output\u ss\u price;
}
我发布这个答案只是为了确保不再在这么简单的事情上浪费时间


我只想知道一件事。当我的筛选函数需要接受三个参数才能正常工作时,原始函数怎么可能只使用两个参数,并且完美地工作?有什么想法吗?

这个钩子的源代码是……是的,这个筛选钩子中有三个参数。
$price
argument被定义到函数
wc\u format\u sale\u price()
中,就在过滤器挂钩之前…这就是为什么…