2017-12-02 13 views
0

저는 Wordpress Multisite에서 일하고 있으며 모든 주식 정보가 기본 사이트 테이블에서 가져와 지도록 노력하고 있습니다. 내 테마의 functions.php에서 get_stock_quantity() 함수를 덮어 쓰려고합니다. 내가 뭘 찾았는지내 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
0123() 방법이있다다른 제품에 대한 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

나는 그것을했다. 그러나 나는 같은 문제에 직면하고있다. 당신이 쓴 필터는 정확히 무엇을하고 있었는지 "제품 편집"페이지의 재고량 기능을 덮어 쓸 필요가 있습니다. 현재 제품 목록 테이블에서 기본 사이트의 재고 수량을 얻을 수 있지만 제품 페이지 편집에서 기본 사이트의 테이블에서 가져 오기가 아니라 자체 테이블 (하위 사이트 테이블)의 재고가 표시됩니다. – Omicans