Omi*_*ans 3 wordpress woocommerce multisite
我在 Wordpress Multisite 中工作,并试图确保从基本站点表中获取所有库存信息。我试图在我的主题的functions.php 中覆盖get_stock_quantity() woocomerce 函数。我发现的是
public function get_stock_quantity( $context = 'view' ) {
return $this->get_prop( 'stock_quantity', $context );
}
Run Code Online (Sandbox Code Playgroud)
现在这既不是过滤器也不是动作。我覆盖了一个过滤器
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;
}
Run Code Online (Sandbox Code Playgroud)
但是 woocommerce_product_get_stock_quantity 仅适用于产品列表页面。单个产品编辑页面使用 get_stock_quantity。
如何在不更改核心文件的情况下覆盖它?谢谢
更改get_stock_quantity()方法的正确方法取决于产品。正如您已经注意到查看源代码时看到的:
return $this->get_prop( 'stock_quantity', $context );
Run Code Online (Sandbox Code Playgroud)
现在get_prop()方法是WC_Data类的一部分,并有一个通用的过滤器钩子:
$value = apply_filters( $this->get_hook_prefix() . $prop, $value, $this );
Run Code Online (Sandbox Code Playgroud)
如果你看看 get_hook_prefix() 方法,你有这个:
return 'woocommerce_' . $this->object_type . '_get_';
Run Code Online (Sandbox Code Playgroud)
为变型产品的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;
}
Run Code Online (Sandbox Code Playgroud)
因此,对于产品变体,您使用woocommerce_product_variation_get_stock_quantity过滤器钩子。
对于其他情况woocommerce_product_get_stock_quantity过滤器钩子
| 归档时间: |
|
| 查看次数: |
1457 次 |
| 最近记录: |