gpt4 book ai didi

php - woocommerce 计算并保存价格

转载 作者:可可西里 更新时间:2023-11-01 13:27:29 25 4
gpt4 key购买 nike

我使用这个优秀的教程将自定义字段添加到 Woocommerce/添加产品/常规选项卡 http://www.remicorson.com/mastering-woocommerce-products-custom-fields/

自定义字段(高度、宽度、乘数)正在保存到数据库中。我想根据自定义字段计算价格,并将价格作为正常价格保存到数据库。问题是没有保存价格。
这是我的代码,来 self 的子主题中的 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 字段。所以这些行不起作用,即使相同的变量将更新 _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 中更新价格时缺少?

最佳答案

我认为您对前端显示的价格有疑问。如果您想在前端反射(reflect) _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.
}

已更新

只需向 woocommerce_process_product_meta 操作 Hook 添加一个更高优先级,它就会成功。

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

我已经测试过了,它工作正常。
希望这对您有所帮助!

关于php - woocommerce 计算并保存价格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41628018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com