2017-12-02 127 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

相關問題