2017-01-13 2 views
6

Ich habe hinzugefügt, benutzerdefinierte Felder WooCommerce/Produkt hinzufügen/General Reiter dieses hervorragende Anleitung http://www.remicorson.com/mastering-woocommerce-products-custom-fields/WooCommerce berechnen und speichern Preis

Die benutzerdefinierten Felder (Höhe, Breite, Multiplikator) OK in der Datenbank gespeichert werden. Ich möchte einen Preis basierend auf den benutzerdefinierten Feldern berechnen und den Preis in der Datenbank als regulärer Preis speichern. Das Problem ist der Preis wird nicht gespeichert.
Hier ist mein Code, von functions.php in meinem Kind Thema:

/* 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)); 
    } 
} 

Alles funktioniert die Preisfelder in der Datenbank mit Ausnahme aktualisieren. Meine benutzerdefinierten Felder werden mit derselben Syntax aktualisiert. Ich habe bestätigt, dass die Variable $woocommerce_product_area_price existiert, und es aktualisiert das benutzerdefinierte Feld, aber die gleiche Variable aktualisiert keine _regular_price oder _price Felder. So werden diese Linien nicht funktioniert, obwohl die gleiche Variable das _product_area_price Feld aktualisieren:

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)); 
} 

Vielleicht gibt es einige Syntax oder überprüfen Ich vermisse den Preis in WooCommerce für die Aktualisierung?

+0

Haben Sie in der DB eingecheckt, dass der Preis gesichert wird oder nicht? oder das Problem ist, dass es nicht im Frontend reflektiert wird? –

+0

Wird nicht in der Datenbank gespeichert, Raunak. – Norv

Antwort

2

Was ich, dass Sie ein Problem mit Preis haben, die im Frontend angezeigt wird. Sie müssen _price Schlüssel aktualisieren, wenn Sie im Frontend _regular_price widerspiegeln möchten.

Versuchen Sie diesen Code:

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. 
} 

AKTUALISIERT

Nur höhere Priorität Haken zu woocommerce_process_product_meta Aktion hinzuzufügen, ‚es werde den Trick.

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

Ich habe es getestet und es funktioniert gut.
Hoffe, das hilft!

+0

@ user3547460: Können Sie bitte Ihre Frage dahingehend aktualisieren, welchen Hook Sie für 'woo_add_custom_general_fields_save' verwendet haben? –

+0

Ich habe ein komplettes Code-Snippet eingefügt, um zu zeigen, dass der Hook woocommerce_process_product_meta – Norv

+0

ist, vielen Dank Raunak, du hast meinen Tag-Champion gerettet! – Norv

Verwandte Themen