2016-05-09 6 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はそれらの値を投稿メタに保存します。したがって、デフォルトのシンプルプロダクトからマイプロダクトに切り替える前に、仮想とダウンロード可能なものを最初に確認しない限り、ダウンロード設定とリンクは保存されません。

今や、解決策はかなり単純です(そして、働いています)。手動で(err ... 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

関連する問題