woocommerce preis berechnen und sparen

Lesezeit: 4 Minuten

Benutzer-Avatar
Norwegisch

Ich habe mithilfe dieses hervorragenden Tutorials benutzerdefinierte Felder zur Registerkarte Woocommerce/Produkt hinzufügen/Allgemein hinzugefügt http://www.remicorson.com/mastering-woocommerce-products-custom-fields/

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

/* 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, außer der Aktualisierung der Preisfelder in der Datenbank. 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 dieselbe Variable wird nicht aktualisiert _regular_price oder _price Felder. Diese Zeilen funktionieren also nicht, obwohl dieselbe Variable die aktualisiert _product_area_price aufstellen:

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 eine Syntax oder Überprüfung, die ich vermisse, um den Preis in Woocommerce zu aktualisieren?

  • Haben Sie in der DB überprüft, ob der Preis sicher ist oder nicht? oder ist Ihr Problem, dass es nicht im Frontend wiedergegeben wird?

    – Raunak Gupta

    13. Januar 2017 um 6:55 Uhr

  • Wird nicht in der Datenbank gespeichert, Raunak.

    – Norv

    14. Januar 2017 um 2:25 Uhr

Benutzer-Avatar
Raunak Gupta

Was ich denke, dass Sie ein Problem mit Price haben, das im Frontend angezeigt wird. Sie müssen aktualisieren _price Taste, wenn Sie reflektieren möchten _regular_price im Frontend.

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

Fügen Sie einfach ein hinzu Höhere Priorität zu woocommerce_process_product_meta Aktionshaken, es wird den Zweck erfüllen.

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

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

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

    – Raunak Gupta

    14. Januar 2017 um 3:06 Uhr

  • Ich habe ein vollständiges Code-Snippet eingefügt, um zu zeigen, dass der Hook woocommerce_process_product_meta ist

    – Norv

    14. Januar 2017 um 4:12 Uhr

1369000cookie-checkwoocommerce preis berechnen und sparen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy