任何方式来覆盖我的functions.php中的get_stock_quantity?
我在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。
如何在不更改核心文件的情况下覆盖它? 谢谢
回答:
您可以使用过滤器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;
}
回答:
修改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
过滤器钩
以上是 任何方式来覆盖我的functions.php中的get_stock_quantity? 的全部内容, 来源链接: utcz.com/qa/257728.html