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

ok私はそれをしましたが、同じ問題に直面しています。フィルタ "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
0123()メソッドは、これを持っています他の製品についてはOBJECT_TYPEは次のとおりです。product
$prop引数はあなたが関連するフィルターフックを建てことができます知っているstock_quantity

です。あなたはwoocommerce_product_variation_get_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_get_stock_quantityフィルタフック

+0

私はそれをしましたが、私は同じ問題に直面しています。あなたが書いたフィルターはまさに私がやっていたものですが、私は "Edit Product"ページの在庫量機能を上書きする必要があります。現時点では、製品リストテーブルで私はベースサイトの在庫数を得ることができますが、製品ページの編集では、ベースサイトのテーブルからフェッチするのではなく、独自のテーブル(サブサイトテーブル)の在庫を表示します。 – Omicans

関連する問題