2017-12-02 88 views
0

我在Wordpress Multisite中工作,并试图确保所有的股票信息都从基地网站表中获取。我想在我的主题的functions.php中覆盖get_stock_quantity()woocomerce函数。我发现的是任何方式来覆盖我的functions.php中的get_stock_quantity?

public function get_stock_quantity($context = 'view') { 
    return $this->get_prop('stock_quantity', $context); 
} 

现在,这既不是过滤器也不是动作。我重写了一个过滤器,即

add_filter('woocommerce_product_get_stock_quantity', 'wcs_custom_get_stock_quantity', 1, 2); 

function wcs_custom_get_stock_quantity($availability, $_product) { 
    global $wpdb; 
    $productQuantity = $wpdb->get_results('SELECT * FROM '.$wpdb->base_prefix.'postmeta WHERE post_id = '.$_product->get_id() ." AND meta_key = '_stock'", OBJECT); 
    return $productQuantity[0]->meta_value; 
} 

但woocommerce_product_get_stock_quantity仅适用于产品列表页面。单个产品编辑页面使用get_stock_quantity。

如何在不更改核心文件的情况下覆盖它? 谢谢

回答

0

您可以使用过滤器woocommerce_data_get_stock_quantity修改值。

add_filter('woocommerce_data_get_stock_quantity' ,'modify_woocommerce_data_get_stock_quantity', 10, 2); 

function modify_woocommerce_data_get_stock_quantity($value, $data) { 
    // Logic to modify your value here 
    return $value; 
} 
+0

好的我做到了,但我面临同样的问题。过滤器“woocommerce_data_get_stock_quantity”不会在编辑产品页面的库存详细信息上调用,因为它显示其自己的表的库存,而不是从基本表的表中获取它。 – Omicans

0

修改get_stock_quantity()方法的正确方法取决于产品。正如你已经通知查看源代码,你看到的是:

return $this->get_prop('stock_quantity', $context); 

现在get_prop()方法是WC_Data类的一部分,有一个通用的过滤钩子:

$value = apply_filters($this->get_hook_prefix() . $prop, $value, $this); 

如果你看看get_hook_prefix ()方法你有这样的:

return 'woocommerce_' . $this->object_type . '_get_'; 

对于变型产品的object_type为:product_variation
对于其他产品的object_type为:product
$prop说法是stock_quantity

所以知道你可以建立相关的过滤器挂钩。试试这个:

add_filter('woocommerce_product_get_stock_quantity' ,'custom_get_stock_quantity', 10, 2); 
add_filter('woocommerce_product_variation_get_stock_quantity' ,'custom_get_stock_quantity', 10, 2); 
function custom_get_stock_quantity($value, $product) { 
    $value = 15; // <== Just for testing 
    return $value; 
} 

因此对于产品变体,您使用woocommerce_product_variation_get_stock_quantity过滤器钩子。
而对于其他情况woocommerce_product_get_stock_quantity过滤器钩

+0

好的,我做到了,但我面临同样的问题。您所写的过滤器完全符合我的要求,但我需要覆盖“编辑产品”页面的库存数量功能。目前,在产品列表中,我可以获取基地的库存数量,但是在编辑产品页面上,它显示了它自己的表格(Subsite Table)的库存,而不是从基地的表格中获取库存。 – Omicans