2017-01-13 20 views
6

を保存私はWoocommerceに/ http://www.remicorson.com/mastering-woocommerce-products-custom-fields/woocommerceの計算と価格

カスタムフィールド(高さ、幅、乗数)はOKデータベースに保存されているこの素晴らしいチュートリアルを使用して製品/ [全般]タブを追加するカスタムフィールドを追加しました。 カスタムフィールドに基づいて価格を計算し、価格をデータベースに保存するには、通常価格としてください。 価格が保存されていないという問題があります。
は、ここに私の子供のテーマでのfunctions.phpから、私のコードです:

/* CUSTOM FIELDS: Add custom fields to Product/General pane in Woocommerce 
    from http://www.remicorson.com/mastering-woocommerce-products-custom-fields/ */ 

// Display Fields 
add_action('woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields'); 
// Save Fields 
add_action('woocommerce_process_product_meta', 'woo_add_custom_general_fields_save'); 

function woo_add_custom_general_fields() 
{ 
    global $woocommerce, $post; 
    echo '<div class="options_group">'; 

    // Product Height 
    woocommerce_wp_text_input(
     array(
      'id' => '_product_height', 
      'label' => __('Product Height (inches)', 'woocommerce'), 
      'placeholder' => '', 
      'description' => __('Enter the product height in inches here.', 'woocommerce'), 
      'type' => 'number', 
      'custom_attributes' => array(
       'step' => 'any', 
       'min' => '0' 
      ) 
     ) 
    ); 

    // Product Width 
    woocommerce_wp_text_input(
     array(
      'id' => '_product_width', 
      'label' => __('Product Width (inches)', 'woocommerce'), 
      'placeholder' => '', 
      'description' => __('Enter the product width in inches here.', 'woocommerce'), 
      'type' => 'number', 
      'custom_attributes' => array(
       'step' => 'any', 
       'min' => '0' 
      ) 
     ) 
    ); 

    // Product Area Multiplier 
    woocommerce_wp_text_input(
     array(
      'id' => '_product_area_mult', 
      'label' => __('Product Area Multiplier', 'woocommerce'), 
      'placeholder' => '', 
      'description' => __('Enter Product Area Multiplier. ', 'woocommerce'), 
      'type' => 'number', 
      'custom_attributes' => array(
       'step' => 'any', 
       'min' => '0' 
      ) 
     ) 
    ); 

    // Product Area Price: added this field to check if this value is being calculated 
    woocommerce_wp_text_input(
     array(
      'id' => '_product_area_price', 
      'label' => __('Product Area Price', 'woocommerce'), 
      'placeholder' => '', 
      'description' => __('Product Area Price. Calculated automatically', 'woocommerce'), 
      'type' => 'number', 
      'custom_attributes' => array(
       'step' => 'any', 
       'min' => '0' 
      ) 
     ) 
    ); 

    echo '</div>'; 
} 

function woo_add_custom_general_fields_save($post_id) 
{ 
    $woocommerce_product_height = $_POST['_product_height']; 
    $woocommerce_product_width = $_POST['_product_width']; 
    $woocommerce_product_area_mult = $_POST['_product_area_mult']; 
    $woocommerce_product_area_price = $_POST['_product_area_price']; 

    // save height, width, multiplier 
    if (!empty($woocommerce_product_height)) 
     update_post_meta($post_id, '_product_height', esc_attr($woocommerce_product_height)); 

    if (!empty($woocommerce_product_width)) 
     update_post_meta($post_id, '_product_width', esc_attr($woocommerce_product_width)); 

    if (!empty($woocommerce_product_area_mult)) 
     update_post_meta($post_id, '_product_area_mult', esc_attr($woocommerce_product_area_mult)); 


    // calculate and save _product_area_price, _regular_price, price as Height*Width*Mult 
    if (!empty($woocommerce_product_height) && !empty($woocommerce_product_width) && !empty($woocommerce_product_area_mult)) 
     $woocommerce_product_area_price = $woocommerce_product_height * $woocommerce_product_width * $woocommerce_product_area_mult; 

    if (!empty($woocommerce_product_area_price)) 
     update_post_meta($post_id, '_product_area_price', esc_attr($woocommerce_product_area_price)); 

    if (!empty($woocommerce_product_area_price)) 
    { 
     update_post_meta($post_id, '_regular_price', esc_attr($woocommerce_product_area_price)); 
     update_post_meta($post_id, '_price', esc_attr($woocommerce_product_area_price)); 
    } 
} 

すべてがデータベースに価格フィールドを更新除いて取り組んでいます。私のカスタムフィールドは同じ構文で更新されます。変数$woocommerce_product_area_priceが存在し、カスタムフィールドを更新していますが、同じ変数が_regular_priceまたは_priceフィールドを更新していないことを確認しました。

if (!empty($woocommerce_product_area_price)) 
{ 
    update_post_meta($post_id, '_regular_price', esc_attr($woocommerce_product_area_price)); 
    update_post_meta($post_id, '_price', esc_attr($woocommerce_product_area_price)); 
} 

たぶんそこにいくつかの構文がありますかWoocommerceで価格を更新するために私が行方不明ですチェック:だからこれらの行は、同じ変数が_product_area_priceフィールドを更新するにもかかわらず、動作しませんの?

+0

DBに価格が保存されているかどうかチェックしましたか?それともフロントエンドに反映されていないということですか? –

+0

Raunakデータベースに保存されていません。 – Norv

答えて

2

フロントエンドに表示されている価格に関する問題があること_regular_priceをフロントエンドに反映させる場合は、_priceキーを更新する必要があります。

は、このコードを試してみてください。

if (!empty($area_price)){ 
    update_post_meta($post_id, '_regular_price', esc_attr($area_price)); 
    update_post_meta($post_id, '_price', esc_attr($area_price)); //<-- Add this line. 
} 

UPDATED

ちょうど優先度の高いwoocommerce_process_product_metaにアクションフックを追加

、それはトリックを行うでしょう。

add_action('woocommerce_process_product_meta', 'woo_add_custom_general_fields_save', 99); 

私はそれをテストして正常に動作しています。
これが役立つことを願っています!

+0

@ user3547460: 'woo_add_custom_general_fields_save'にどのようなフックを使用したかを質問してください。 –

+0

フックがwoocommerce_process_product_metaであることを示す完全なコードスニペットが含まれています – Norv

+0

Raunak、ありがとう、私の一日のチャンピオンを保存しました! – Norv

関連する問題