2016-05-09 105 views
0

我已創建一個自定義的WC產品類型,其定義如下:Woocommerce定製下載的產品類型

class WC_Product_My_Product extends WC_Product_Simple { 

public function __construct($product) { 

    $this->product_type = 'my_product'; 

    $this->virtual = 'yes'; 
    $this->downloadable = 'yes'; 
    $this->manage_stock = 'no'; 
} 
} 

正如你所看到的產品,如何打算,虛擬產品,包括可下載的文件。 我正在使用Jquery來定義在選擇產品時要顯示的設置。 我也顯示了通常顯示的虛擬和可下載的簡單產品的字段。

/* 
* Apply same settings as virtual/downloadable files 
*/ 
jQuery('.options_group.show_if_downloadable').addClass('show_if_my_product'); 
jQuery('.hide_if_virtual').addClass('hide_if_my_product'); 

jQuery('body').on('woocommerce-product-type-change', function(event, select_val, select) { 

    if (select_val == 'my_product') { 
     jQuery('.show_if_my_product').show(); 
     jQuery('.hide_if_my_product').hide(); 
    } else { 
     jQuery('.show_if_my_product').show(); 
     jQuery('.hide_if_my_product').hide(); 
    } 

現在的問題是,「虛擬」,並從下拉列表中選擇我的產品時,不選擇「下載」複選框,因爲它們不是默認的簡單產品。由於商業只是使用JQuery來顯示/隱藏不同產品類型的不同字段(但字段仍然存在),所以當添加新產品時,WordPress將它們的值存儲在帖子meta中。因此,除非我記得在從默認簡單產品切換到我的產品之前先檢查虛擬並可下載,否則我的下載設置和鏈接將不會被存儲。

現在,解決方案相當簡單(並且正在工作)。手動(錯誤...使用jQuery)檢查「虛擬」和「可下載」複選框。像這樣:

jQuery('#_virtual').attr('checked' , true); 
jQuery('#_downloadable').attr('checked' , true); 

現在,正如我所說,這是有效的,所以確實沒有什麼可以「修復」。但是,我不太滿意這個解決方案,因爲它看起來像是一個工作。 這是我的理解(也許是錯誤的?),我的產品類已經定義它們是虛擬的和可下載的,並且它們不應該因此跟隨什麼隱藏的輸入字段,只有其他產品在那裏說。 也許在我定義產品的時候,我的php中缺少一些東西?或者,我可能完全誤解了WC_Product子類的「虛擬」和「可下載」屬性是什麼意思?

如果這是一個合適的解決方案,那麼我應該簡單地將定義移除爲虛擬的並且可以在php類中下載嗎?

最後,這個解決方案的工作原理,我看不出有任何主要問題,但它似乎仍然缺少某些東西,不應該這樣做。我只是偏執狂嗎?

回答

2

我找到解決方案來解決這個問題。你只需要添加此代碼

add_action('product_type_options', 'wc_custom_product_type_options'); 
function wc_custom_product_type_options($options){ 
    $options['downloadable']['wrapper_class'] = 'show_if_simple show_if_my_product'; 
    $options['virtual']['wrapper_class'] = 'show_if_simple show_if_my_product'; 
    return $options; 
} 
+0

這不僅僅是影響它們的顯示方式嗎? – DavidTonarini

+0

是的,這就是爲什麼你需要添加$ this-> virtual ='yes';和$ this-> downloadable ='yes';給建設者 –

+0

我已經做過了,不是嗎? – DavidTonarini