我正在使用Woocommerce与Woocommerce Composite Products扩展(允许您使用其他产品组合制作产品)。
我试图找出复合产品是否“库存”,但通常的功能is_in_stock()不适用于复合材料。
如果有更合适的功能,我想知道它是什么。
Alternatrively,下面的函数'wc_get_product()'返回以下内容,包括componentproduct ID(assigned_ids):
$product = wc_get_product($productid);
var_dump($product);
返回:
object(WC_Product_Composite)#11305 (23) {
["extended_data":"WC_Product_Composite":private]=>
array(7) {
["add_to_cart_form_location"]=>
string(7) "default"
["shop_price_calc"]=>
string(7) "default"
}
["composite_meta":"WC_Product_Composite":private]=>
array(4) {
[1477435352]=>
array(19) {
["component_id"]=>
string(10) "1477435352"
["query_type"]=>
string(11) "product_ids"
["assigned_ids"]=>
array(2) {
[0]=>
int(541)
[1]=>
int(588)
}
}
}
基本上,我想要的是提取并循环遍历'assigned_ids'子阵列,检查每个是否有库存,但除了将其打印到屏幕外,我无法访问此对象的属性,因为它们是“私有的” (我完全不熟悉的东西)。我相信我可以通过在Wordpress /插件文件中搜索类来解决这个问题,但我不知道如何找到它。任何帮助将不胜感激。
答案 0 :(得分:0)
股票 (对复合材料产品来说复杂得多):
关于复合产品中的库存和库存管理,显然有
WC_CP_Stock_Manager
和WC_CP_Stock_Manager_Item
专用课程,所以它似乎没有经典的方式工作,有一些概念< strong>&#34; items&#34; 和&#34; collections&#34; 。此方法和功能可在
includes/class-wc-cp-stock-manager.php
核心文件中找到。
访问数据:
如您所见,要获取WC_Product_Composite
对象受保护的属性,您应该使用核心代码类中记录的继承的WC_Product
方法或更具体的WC_Product_Composite
方法。 / p>
现在,访问(未受保护)数据的最简单方法是使用以下方法继承自WC_Data
Class :
// Get an instance of the WC_Product_Composite object
$product = wc_get_product( $product_id );
// Get the data in an unprotected array
$product_data = $product->get_data();
// Output the raw data (for test)
echo '<pre>'; print_r( $product_data ); echo '</pre>';
// Get special meta data in an unprotected array (if it exist)
$product_meta_data = $product->get_meta_data();
// Output the raw special meta data (for test)
echo '<pre>'; print_r( $product_meta_data ); echo '</pre>';
或者你也可以使用一些WC_Product_Composite
方法:
// Get an instance of the WC_Product_Composite object
$product = wc_get_product( $product_id );
// Get the component Id
$component_data = $product->get_component_id();
// Get the component
$component_data = $product->get_component();
// Get the raw component data
$component_data = $product->get_component_data();
任何方式您都需要了解核心文件代码,以了解工作原理并为复合产品获取正确的方法。