2017-05-16 61 views
2

我想添加一個自定義stock_status woocommerce 3.0在wordpress中。添加一個股票期權給Woocommerce 3.0

最終目標是在產品編輯頁面上添加第三個庫存選項「保留」,並在產品頁面上顯示該庫存狀態。

以前我能在這裏使用的方法: Add stock option in woocommerce,它確實工作要額外股票期權增加了產品管理,但它看起來像Woocommerce 3.0也有一些是壓倒一切的實際產品網頁上我的設置。它也在產品頁面上工作,直到我升級到3.0。

我的functions.php:

function add_custom_stock_type() { 
?> 
<script type="text/javascript"> 
jQuery(function(){ 
    jQuery('._stock_status_field').not('.custom-stock-status').remove(); 
}); 
</script> 
<?php 

woocommerce_wp_select(array('id' => '_stock_status', 'wrapper_class' => 'hide_if_variable custom-stock-status', 'label' => __('Stock status', 'woocommerce'), 'options' => array(
    'instock' => __('In stock', 'woocommerce'), 
    'outofstock' => __('Out of stock', 'woocommerce'), 
    'onhold' => __('On Hold', 'woocommerce'), // The new option !!! 
), 'desc_tip' => true, 'description' => __('Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce')));} 
add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type'); 

function save_custom_stock_status($product_id) { 
update_post_meta($product_id, '_stock_status', wc_clean($_POST['_stock_status'])); 
} 
add_action('woocommerce_process_product_meta', 'save_custom_stock_status',99,1); 

function woocommerce_get_custom_availability($data, $product) { 
switch($product->get_stock_status) { 
    case 'onhold': 
     $data = array('availability' => __('On Hold', 'woocommerce'), 'class' => 'on-hold'); 
    break; 
    case 'instock': 
     $data = array('availability' => __('In stock', 'woocommerce'), 'class' => 'in-stock'); 
    break; 
    case 'outofstock': 
     $data = array('availability' => __('Out of stock', 'woocommerce'), 'class' => 'out-of-stock'); 
    break; 
} 
return $data; 
} 
add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 3, 2); 

https://pastebin.com/EFtBVY9h

我可以在數據庫中看到,stock_status正確設置爲「掛起」,我的自定義狀態,當我選擇它的管理,但這並未在實際產品頁面上應用。

爲了驗證,我修改了price.php簡單地輸出庫存狀態:

<p class="price"> 

<?php 
    $stockamount = $product->get_stock_quantity(); 
    $price = $product->get_price_html(); 
    $stockstatus = $product->get_stock_status(); 
    $pricelabelone = "Out of Stock"; 
    $pricelabeltwo = "On Hold"; 

    echo $stockstatus;    
?> 
</p> 

然而,即使我設置產品,以「掛起」(這是節約),該產品頁面始終輸出「庫存」(測試產品: http://aegis-staging.byethost7.com/dgh/product/santa-cruz-h13-custom-42-cocobolo-and-moon-spruce/)。

我錯過了什麼?

回答

0

此解決方案可能會幫助您解決問題。使用「get_post_meta()」而不是使用get_stock_status()來獲取庫存狀態。

經過「woocommerce_get_availability」鉤碼,如下面的代碼

function woocommerce_get_custom_availability($data, $product) { 
$stock_status = get_post_meta($product->id , '_stock_status' , true); 
switch($stock_status ) { 
    case 'onhold': 
     $data = array('availability' => __('On Hold', 'woocommerce'), 'class' => 'on-hold'); 
    break; 
    case 'instock': 
     $data = array('availability' => __('In stock', 'woocommerce'), 'class' => 'in-stock'); 
    break; 
    case 'outofstock': 
     $data = array('availability' => __('Out of stock', 'woocommerce'), 'class' => 'out-of-stock'); 
    break; 
} 
return $data; 
} 
add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 3, 2); 
+0

工作就像一個魅力,謝謝! – Kevin