Call WC_Product get_price()?

时间:2019-08-02 作者:Peter Westerlund

我正在尝试查看各种选项,以便与产品的价格挂钩,从而能够更改常规价格。

这是在我的可变产品的情况下,我希望最终能够从与此变化相关的帖子中获取价格和其他数据,我将价格和其他详细信息保存为该帖子的元数据。

这将使得有可能像“一般价格”一样根据需求检索变化并作为价格使用。但是,如果变化有自己的价格设置,那么将使用它来代替。

但无论如何,这种编码需要完成。我发现我可以get_prop() 在WooCommerce。这至少是一个开始。但不知怎么的,这对我不起作用。

我尝试了一个测试:

function test_change($value, $prop) { return 666; } 
add_filter(\'woocommerce_product_get_price\', \'test_change\');
但正如我所说,这似乎不起作用。导致$product[\'display_price\'] 不显示666.

所以我只想弄清楚一切是如何运作的。所以我想打电话给get_price() 调用get_prop(). 我能看到的是这个函数(get_price) 应该能够从产品对象调用(WC_Product). 但它不起作用。我已尝试此代码来测试:

$prodfac = new WC_Product_Factory;
$prodf = $prodfac->get_product($var[\'product_id\']);
这基本上是(我所理解的)什么wc_get_product() 做我看到了wc_get_product() 用于woocommerce插件核心代码中的其他地方,然后调用get_price(). 所以我不明白为什么在我尝试的时候它不起作用。

我试着查看woocommerce的核心代码,但我在任何地方都看不到get_price() 会被封锁或其他什么。这也是一项公共职能。我只是不明白为什么调用那个函数对我来说不起作用。或者为什么会被钩住get_prop() 不适合我。

1 个回复
最合适的回答,由SO网友:Antti Koskinen 整理而成

关于过滤器,您尝试了,但没有工作,我的直觉是它没有工作,因为它缺少(优先级和)接受的arg count参数。目前

add_filter(\'woocommerce_product_get_price\', \'test_change\');

回调的默认优先级为10和1参数,但在中使用了两个参数

function test_change($value, $prop) { return 666; }

因此,您需要像这样更改过滤器,

add_filter(\'woocommerce_product_get_price\', \'test_change\', 10, 2);

您还可以根据需要使用一些大于或小于10的数字,使过滤器稍后或更早启动。