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